- 通过let a :number 来制定a的类型必须为 number类型。
ep: a = ‘hello' //报错
a = 20 //正确。
- 如果变量声明和赋值同时进行,ts自动对变量进行类型检测。
let a = 20 //自动认定a为number类型。
- typescript类型:number/boolean/string/object/any/array/tuple/字面量/void/enum{}/unknown等,javascript里有的没的ts里都有。
- unknown和any的区别
- 前者实际上是一个类型安全的any;
- any类型变量可以赋值给其他类型的变量,而unknown类型赋值给其他类型会报错
- 能用unknown尽量优先使用unknown。
- 类型断言:手动指定一个值的类型。
写法一: 变量 as 类型;-> s = e as string [在tsx(React的jsx语法的ts版)中必须使用写法一]
写法二:<类型>变量;-> s = e - ts可指定函数返回值类型
ep: function mySum(a: number, b: number): number {
return a + b;
} //指定函数的返回值类型为number
- void类型:用来表示空,以函数为例,就表示没有返回值
- never类型:永远不会返回结果,常用于报错
- {}类型:用来指定对象中可以包含哪些属性,在属性名后加’?'表示属性是可选的
- 可选参数必须在必选参数之后,换句话说,必选参数之前不能有可选参数,当函数存在默认参数时,不受此规则的限制。
ep: let b: { name: string; age?: number };
b = { name: "小明", age: 18 };
- 对象中存在[proName:string]:any
表示任意类型的属性
ep: let c: { name: string; [proName: string]: any };
c = { name: "小红", age: 18, gender: "男" };
- 数组的类型声明:
写法一:类型[];
写法二:Array<类型> (也叫数组泛型) - .tuple元组:就是固定长度的数组,存储效率相比数组更好
写法:[类型,类型,类型] - 类型的别名
ep: type myType = 1 | 2 | 3 | 4 | 5;
let k: myType;
let l: myType;
let m: myType;
k = 2;
- 实现typescript的实时监听转化:
方法一:在终端通过 tsc xxx.ts -w 命令来实现对当前ts文件的监听,实时编译转化成最新的js文件。
缺陷:只能对当前ts文件进行监听,如果有多个ts需要打开多个终端,适用范围窄。
方法二:在当前文件夹下,创建tsconfig.json文件,代码块只需1行 {} 来符合json文件的格式要求,在终端输入 tsc -w 即可对当前文件夹下的ts进行实时转化和监听。 - 在属性名前加 readonly 实现该属性只在创建时被赋值
ep: interface Person {
readonly id: number;
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
id: 89757,
name: "Tom",
gender: "male",
}; //修改 tom.id = 666,则报错
- typescript中的函数表达式
let mySum = function (x: number, y: number): number {
return x + y;
};
上面的代码只对等号右侧的匿名函数进行了类型定义,而等号左边的 mySum,是通过赋值操作进行类型推论而推断出来的。
若需要手动 mySum 添加类型,则为️:
let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y;
};
- =>在typescript和javascript中的区别:
在 TypeScript 类型定义中,=> 表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。
在 ES6 中,=> 为箭头函数。 - 重载:允许一个函数接受不同数量或类型的参数时,作出不同的处理。
ep: function myReverse(x: number | string): number | string | void {
if (typeof x === "number") {
return Number(x.toString().split("").reverse().join(""));
} else if (typeof x === "string") {
return x.split("").reverse().join("");
}
}