0
点赞
收藏
分享

微信扫一扫

Typescript类型别名

类型别名

类型别名声明可以为typescript中任意类型命名。​​type​​是声明类型别名的关键字。​​AliasName​​表示类型别名的名称。​​Type​​表示类型别名关联的具体类型。类型的别名必须是合法的标识符。一般类型别名的首字母需要大写。而且不能使用Typescript内置的类型名作为类型别名的名称。类型别名引用的类型可以为任意类型,在类型别名中,也可以引用其他类型别名。类型别名不会创建一种新的类型,它只是给已有类型命名并直接引用该类型。在程序中,使用类型别名与直接该类型别名引用的类型是完全等价的。

type AliasName = Type;
type Str = string;
type Nr = number | bigint;

一般情况下,在类型别名声明中赋值运算符右侧的类型不允许引用当前定义的类型别名,因为类型别名对其引用的类型使用的及早及值的策略,而不是惰性求值的策略。如果类型别名引用了自身,那么解析类型别名的时候就会出现无限递归引用的问题。我们可以使用递归的类型别名的场景有:

若类型别名引用的类型为接口类型、对象类型字面量、函数类型字面量和构造函数类型字面量,则允许使用递归引用类型别名。

若类型别名引用的是数组类型或元组类型,则允许在元素类型中递归引用类型别名。

若类型别名引用的是泛型类或者泛型接口,则允许在类型参数中递归的引用类型别名。

类型别名和接口差不多,都可以给类型命名并通过该名字来引用表示的类型。但是还是有一些区别的,其中类型别名能够表示非对象类型,而接口只能表示对象类型,所以我们要是表示原始类型、联合类型和交叉类型等只能使用类型别名。接口可以继承其他的接口、类等对象类型,而类型别名则不支持继承。如果想要对类型别名实现类似继承的功能,当类型别名表示对象类型时,可以借助于交叉类型来实现继承的效果。接口在编译时会提示错误和警告,而类型别名的名字只有在当类型别名表示数组类型、元组类型以及类或接口的泛型实例类型情况下才会显示出来。接口具有声明合并的行为,而类型别名则不会进行声明合并。

type Nr = number | bigint;
// 接口
interface People {
age: number
}
interface Son extends People {
name: string
}

举报

相关推荐

0 条评论