any、unknow、nerver
any:任何类型都能赋值给any,编译时不进行类型检查
unknow:任何类型也都能赋值给unknow,但是会进行类型检查,在使用后时候要进行类型判断,或者类型断言。在没有对它进行类型检查之前,ubnknow类型的变量是不能进行任何操作的
1:
let myVariable: unknown = 'Hello world!';
myVariable = 42;
myVariable = true;
if (typeof myVariable === 'string') {
console.log(myVariable.toUpperCase()); // 编译时不会出错
}
2:
let score: unknown = 87.5;
let num = Math.round(score); //error
3:
let score: unknown = 87.5;
let num = Math.round(score as number);
4
interface Admin { name: string; privileges: string[]; }
interface Employee { name: string; startDate: Date; }
type UnknownEmployee = Employee | Admin;
nerver:永远不存在的值的类型,通常用于表示不可达代码(无限循环)、抛出异常等场景。
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {
// do something
}
}
函数
function add(x: number, y: number): number {
return x + y
}
// 推断类型
const myAdd = function(x: number, y: number): number {
return x + y
}
// 完整函数类型写法
const myAdd: (x: number, y: number) => number = function(x: number, y: number): number {
return x + y
}
// 参数类型匹配即可,而不在乎参数名
const myAdd: (a: number, b: number) => number = function(x: number, y: number): number {
return x + y
}
type interface区别
type不但可以定义对象类型 函数类型 还可以定义联合类型、元组
而interface只能定义对象类型、函数类型
都可以实现继承,但继承方式不同,type是&,interface是extends
interface 可以声明合并,两个同名interface会合并,type不能会报错