你所不知道的TypeScript的静态类型

Posted 枯木前头万木春

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你所不知道的TypeScript的静态类型相关的知识,希望对你有一定的参考价值。

TypeScript的一个最主要特点就是可以定义静态类型,英文是Static Typing。那到底是什么意思那?太复杂的概念性东西这里就不讲了,你可以简单的理解“静态类型”为,就是你一旦定义了,就不可以再改变了。比如你是男人就是男人,一辈子都要作男人;是女人就是女人,一辈子都是女人。这个事不可以改变!呃…好像现在也可以随便变来变去啊,这里说的是正常情况。但是它还有一些特性,这个并不像表面的那么简单。


如何定义静态类型?

你可以在上节课的文件夹下建立一个新的demo2.ts文件,然后写下这段代码:

const count : number = 1;

这就是最简单的定义一个数字类型的count的变量,这里的: number就是定义了一个静态类型。这样定义后count这个变量在程序中就永远都是数字类型了,不可以改变了。比如我们这时候给count复制一个字符串,它就报错了。

//错误代码
const count : number = 1;
count = 'jspang'

但这只是最简单的理解,再往深一层次理解,你会发现这时候的count变量,可以使用number类型上所有的属性和方法。

我们可以通过在count后边打上一个.看出这个特性,并且编辑器会给你非常好的提示。这也是为什么我喜欢用VScode编辑器的一个原因。

自定义静态类型

你还可以自己去定义一个静态类型,比如现在你定义一个小姐姐的类型,然后在声明变量的时候,就可以使用这个静态类型了,看下面的代码。

interface XiaoJieJie {
    uname: string ,
    age:number
} 

const  xiaohong : XiaoJieJie ={
    uname: '小红',
    age: 18
}

这时候你如果声明变量,跟自定义不一样,VSCode直接就会报错。

需要注意的是,这时候xiaohong变量也具有uname和age属性了。

这节课你需要记住的是,如果使用了静态类型,不仅意味着变量的类型不可以改变,还意味着类型的属性和方法也跟着确定了。这个特点就大大提高了程序的健壮性,并且编辑器这时候也会给你很好的语法提示,加快了你的开发效率。

随着你不断的深入学习,你会对这两个优点有更深的理解。


基础静态类型和对象类型

在TypeScript静态类型分为两种,一种是基础静态类型,一种是对象类型,这两种都经常使用,非常重要,我们先来看一下什么是基础静态类型。

基础静态类型

基础静态类型非常简单,只要在声明变量的后边加一个:号,然后加上对应的类型哦。比如下面的代码,就是声明了一个数字类型的变量,叫做count。

const count : number = 918;
const myName :string = 'jspang'

类似这样常用的基础类型还有,我这里就举几个最常用的哦,null,undefinde,symbol,boolean,void这些都是最常用的基础数据类型,至于例子,我这里就不详细的写了,后面碰到,我们再继续讲解。

对象类型

我们先来看一个例子,通过例子有经验的小伙伴就知道个大概了,然后我们再来讲解(其实上节课我们也讲到了,我们这里就当复习了)。

新建一个文件demo3.ts,然后写下如下代码。

const xiaoJieJie:{
    name:string,
    age:number
} = {
    name:'大脚',
    age:18
}
console.log(xiaoJieJie.name)

写完后,我们在terminal(终端)中输入ts-node demo3.ts,可以看到结果输出了大脚。

这就是一个经典的对象类型,也是最简单的对象类型。对象类型也可以是数组,比如现在我们需要很多小姐姐,我们就可以这样写。

const xiaoJieJies : String [] = ['谢大脚','刘英','小红']
这时候的意思是,变量xiaoJieJies必须是一个数组,数组里的内容必须是字符串。你可以试着把字符串改为数字,VSCode会直接给我们报错。

const xiaoJieJies : String [] = ['谢大脚','刘英',123]
现在都讲究面向对象编程,我这面向对象编程这么多年了,也没再多编出来一个。

我们再来看看下面的代码。这个代码就是用类的形式,来定义变量。

class Person{}
const dajiao : Person = new Person()

这个意思就是dajiao必须是一个Person类对应的对象才可以。我们还可以定义一个函数类型,并确定返回值。

代码如下:

const jianXiaoJieJie : ()=> string =()=>{return '大脚'}
那我们现在总结一下对象类型可以有几种形式:

  • 对象类型
  • 数组类型
  • 类类型
  • 函数类型
    这几种形式我们在TypeScript里叫做对象类型。

以上是关于你所不知道的TypeScript的静态类型的主要内容,如果未能解决你的问题,请参考以下文章

你所不了解的TypeScript 类型编程

你所不知道的 C# 中的细节

你所不知道的编译器优化技术 | 鉴释刘新铭做客清华大学

JavaScript你所不知道的困惑

Java泛型——你所不知道的那些泛型背后

Sublime Text 你所不知道的12个秘密