基础
TypeScript里,在有些没有明确指出类型的地方,类型推论会帮助提供类型
let x = 3;
变量x的类型被推断为数字。 这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时。
大多数情况下,类型推论是直截了当地。
最佳通用类型
当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型。例如,
let x = [0, 1, null];
为了推断x的类型,我们必须考虑所有元素的类型。 这里有两种选择: number和null。 计算通用类型算法会考虑所有的候选类型,并给出一个兼容所有候选类型的类型。
类型别名
type 关键字(可以给一个类型定义一个名字)多用于复合类型
type str = string
let s:str = "zl"
console.log(s);
定义函数别名
type f = () => number
let s: f = () => {
return 2
}
console.log(s());
定义联合类型别名
type str = string | number;
let a: str = '1';
let b: str = 2;
定义值的别名
type value = number | '1' | true;
let a: value = 1;
let b: value = '1';
let c: value = true;
let d: value = false; // 错误,s只能为number '1' true三者中的一个
type和interface还是一些区别的,虽然都可以定义类型
- interface可以继承, type只能通过&交叉类型合并
- type 可以定义联合类型和可以使用一些操作,interface不行
- interface遇到重名的会合并,type 不行
type高级用法
左边的值会作为右边值的子类型,遵循图中上下的包含关系
// extends包含
type a = 1 extends number ? 1 : 0 //1
type a = 1 extends Number ? 1 : 0 //1
type a = 1 extends Object ? 1 : 0 //1
type a = 1 extends any ? 1 : 0 //1
type a = 1 extends unknow ? 1 : 0 //1
type a = 1 extends never ? 1 : 0 //0