元组能够看做是数组的拓展,表示已知元素数量和类型的数组。也就是说已知数组中每个位置上元素的类型数组
let tuple: [string, number, boolean];
tuple = ["a", 2, false];
tuple = [2, "a", false]; // error 不能将类型“number”分配给类型“string”。 不能将类型“string”分配给类型“number”。
tuple = ["a", 2]; // error Property '2' is missing in type '[string, number]' but required in type '[string, number, boolean]'复制代码
枚举能够看做是给数值赋予名字bash
enum Roles {
SUPER_ADMIN = 0,
ADMIN = 1,
USER = 2
}
console.log(Roles.SUPER_ADMIN) //0
也能够经过值来获取到名字
console.log(Roles[1]) // ADMIN
复制代码
Any表示赋予任何值均可以,即任意类型函数
let value: any;
value = 123;
value = "abc";
value = false复制代码
也能够在定义数组类型时使用 any 来指定数组中的元素类型为任意类型
ui
const array: any[] = [1, "a", true];复制代码
void表示没有任意类型,与Any相反spa
const consoleText = (text: string): void => {
console.log(text);
}; //没有返回值复制代码
void类型的变量只能赋值为undefined和null,其余类型不能赋值给void类型的变量code
never指那些永远不存在的值的类型,它是那些总会抛出异常或根本不会有返回值的函数表达式的返回值类型。get
const errorFunc = (message: string): never => {
throw new Error(message);
};复制代码
const infiniteFunc = (): never => {
while (true) {}
};复制代码
nuknown表示未知类型string
交叉类型就是取多个类型的并集,使用 & 符号定义,被&符连接的多个类型构成一个交叉类型,
表示这个类型同时具有这几个链接起来的类型的特色
const merge = <T, U>(arg1: T, arg2: U): T & U =>{ let res = <T & U > {}; res = Object.assign(arg1, arg2) return res}const info1 = { name: 'Lison'}const info2 = { age: 18}const ListInfo = merge(info1,info2)console.log(ListInfo) // Object复制代码
联合类型实际是几个类型的结合,可是和交叉类型不一样,联合类型是要求只要符合联合类型中任意一种类型便可,它使用 |
符号定义。当咱们的程序具备多样性,元素类型不惟一时,即便用联合类型。
it
const getLength = (content: string|number): number => { if(typeof content === "string"){ return content.length }else{ return content.toString().length }}console.log(getLength("abcd")) //4console.log(getLength(1234)) //4复制代码