Skip to content
在本页面

基本类型检查 💯

TS是一个可选的静态的类型系统

如何进行类型约束?

仅需要在变量、函数的参数、函数的返回值的位置加上 : 类型

ts
function sum(a: number, b: number): number{
    return a + b;
}

let num: number = sum(3, 4);

TIP

小技巧:当我们想改sum这个函数名的时候,可以双击选中函数名,然后按F2或右键重命名符号,然后在输入框里修改为add,此时,所有的sum名都被同步修改为了add。因为ts里有严格的类型检查,他们之间是有联系的。

不仅如此,如果在其他的文件里调用了这个sum如果不知道这个sum函数写的啥可以双击选中函数,然后按F12或右键转到定义,它就会跳到函数sum所在定义的位置。

类型推导

ts在很多场景中可以自动完成类型推导

ts
function sum(a: number, b: number){
    return a + b;
}

let num = sum(3, 4);// 推导成功 sum返回值为number类型,所以变量num也是number类型

let name = 'kevin';// 推导成功 name为string类型

什么时候能推导成功?

ts
let age;// 没有推导成功,此处类型为any类型,并且age左下角有三个小点,表示警告

WARNING

any:表示任意类型,对该类型,ts不进行类型检查

TIP

小技巧,如何区分数字字符串和数字,关键看怎么读?

ts
let phone:number = 13344445555;// 读作1百3十3亿4千4百4十4万5千5百5十5
// 而正常手机号都是读 13344445555a 所以这里是字符串
let phone = '13344445555';// 所以这里phone被推导的类型应为string

源代码和编译结果的差异

ts
function add(a: number, b: number){
    return a + b;
}

let num = add(3, 4);
let name = 'kevin';
let phone = '13344445555'

tsc编译后

js
function add(a, b) {
    return a + b;
}
let num = add(3, 4);
let name = 'kevin';
let phone = '13344445555';

WARNING

编译结果中没有类型约束信息

基本类型

类型关键字类型
number数字
string字符串
boolean布尔
下面例子数组
object对象
null和undefined
ts
let nums: number[] = [2, 3, 4];// 数字类型的数组,数组的每一项只能为number类型
let nums = [2, 3, 4];// 可以简写,因为ts会类型推导

let nums: Array<number> = [2, 3, 4];

nullundefined是所有其他类型的子类型,它可以赋值给其他类型。

你可以在tsconfig.json配置文件里加上如下配置,表示更加严格的空类型检查,这样就不能将nullundefined赋值给其他类型了。

json
// tsconfig.json
{
    "compilerOptions": {
       "strictNullChecks": true
    }
}
ts
let n:string = undefined;