TypeScript 特殊类型


TypeScript 具有特殊类型,可能不引用任何特定类型的数据。


类型:任意

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 将无法提供类型安全性,并且依赖类型数据的工具(例如自动完成)将无法工作。请记住,应以"any" 成本避免这种情况...


类型:未知

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只要定义它,就会有效地抛出错误。

let x: never = true; // Error: Type 'boolean' is not assignable to type 'never'.
亲自试一试 »

never很少使用,尤其是单独使用,它的主要用途是高级泛型。


类型:未定义和空

undefinednull是引用 JavaScript 原语的类型undefinednull分别。

let y: undefined = undefined;
let z: null = null;
亲自试一试 »

这些类型没有多大用处,除非strictNullChecks已启用在tsconfig.json文件。


TypeScript 练习

通过练习测试一下

练习:

创建一个空的 "myVar" 变量,并禁用类型检查:

let myVar: ;
        

开始练习