TypeScript 特殊类型

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


类型: any

any 是一种禁用类型检查并有效地允许使用所有类型的类型。

下面的例子没有使用any,会抛出错误:

没有any

的例子
let u = true;
u = "string"; // 错误:类型"字符串"不可分配给类型"布尔"。
Math.round(u); // 错误:"布尔"类型的参数不可分配给"数字"类型的参数。
亲自试一试 »

any 设置为特殊类型 any 会禁用类型检查:

any

实例
let v: any = true;
v = "string"; // 没有错误,因为它可以是"any"类型
Math.round(v); // 没有错误,因为它可以是"any"类型
亲自试一试 »

any 可以成为过去错误的有用方法,因为它禁用类型检查,但 TypeScript 将无法提供类型安全和依赖类型数据的工具 ,如自动完成,将不起作用。 请记住,应该以"any"避免它......


类型: unknown

unknownany 类似,但更安全。

TypeScript 将阻止使用 unknown 类型,如下例所示:

let w: unknown = 1;
w = "string"; // 没有错误
w = {
  runANonExistentMethod: () => {
    console.log("I think therefore I am");
  }
} as { runANonExistentMethod: () => void}
// 当我们不知道类型时,我们如何避免下面注释掉的代码的错误?
// w.runANonExistentMethod(); // Error: Object is of type 'unknown'.
if(typeof w === 'object' && w !== null) {
  (w as { runANonExistentMethod: Function }).runANonExistentMethod();
}
// 虽然我们必须多次施法,但我们可以检查 if 以确保我们的类型并进行更安全的施法
亲自试一试 »

比较上面的例子和前面的例子,any

unknown 最好在您不知道要输入的数据类型时使用。 要稍后添加类型,您需要强制转换它。

铸造是我们使用"as"关键字来表示属性或变量属于铸造类型。


类型: never

never 在定义时有效地抛出错误。

let x: never = true; // 错误:类型"布尔"不可分配给类型"never"。
亲自试一试 »

never 很少使用,尤其是它本身,它的主要用途是在高级泛型中。


类型: undefined & null

undefinednull 是指 JavaScript 原语 undefinednull

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

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


TypeScript 练习

学习训练

训练:

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

let myVar: ;

开始训练