TypeScript 特殊类型
TypeScript 具有特殊类型,可能不指代任何特定类型的数据。
类型:any
any
是一种禁用类型检查并实际上允许使用所有类型的类型。
下面的例子不使用any
并且会抛出错误:
示例无any
let u = true; u = "string"; // Error: Type 'string' is not assignable to type 'boolean'. Math.round(u); // Error: Argument of type 'boolean' is not assignable to parameter of type 'number'.
设置any
为特殊类型any
将禁用类型检查:
例如any
let v: any = true; v = "string"; // no error as it can be "any" type Math.round(v); // no error as it can be "any" type
any
这是一种有用的方法来避免错误,因为它禁用了类型检查,但 TypeScript 将无法提供类型安全,并且依赖类型数据的工具(例如自动完成)将不起作用。请记住,应该不惜一切代价避免它...
类型:unknown
unknown
是一种类似但更安全的替代方案any
。
TypeScript 将阻止unknown
使用类型,如下例所示:
let w: unknown = 1; w = "string"; // no error w = { runANonExistentMethod: () => { console.log("I think therefore I am"); } } as { runANonExistentMethod: () => void} // How can we avoid the error for the code commented out below when we don't know the type? // w.runANonExistentMethod(); // Error: Object is of type 'unknown'. if(typeof w === 'object' && w !== null) { (w as { runANonExistentMethod: Function }).runANonExistentMethod(); } // Although we have to cast multiple times we can do a check in the if to secure our type and have a safer casting
将上面的例子与前一个示例进行比较,其中any
。
unknown
最适合在您不知道输入的数据类型时使用。若要稍后添加类型,您需要对其进行强制转换。
当我们使用“as”关键字来表示属性或变量属于强制类型时,即进行强制转换。
类型:never
never
无论何时定义它,都会有效地引发错误。
let x: never = true; // Error: Type 'boolean' is not assignable to type 'never'.
never
很少使用,尤其是单独使用时,其主要用于高级泛型。
类型:undefined & null
undefined
和分别null
是引用 JavaScript 原语和的undefined
类型null
。
let y: undefined = undefined; let z: null = null;
strictNullChecks
除非在文件中启用,否则这些类型没有多大用处tsconfig.json
。