Any
Any 是 TypeScript 的一个例外,你可以用 any 来声明一段代码是
类似于 JavaScript 一样动态的,或者解决类型系统的一些限制。
解析 JSON 是一个很好的例子:
// Any 声明代表着 TypeScript 将认为你更了解你的代码,
并且认为你的代码是安全的,即使它并不一定严格正确。
这段代码将会崩溃:
const myObject = JSON.parse("{}");
// 使用 any 将会赋予你在舍弃一些类型安全性的前提下,
编写更接近原生 JavaScript 的代码能力。
any 更像一个类型通配符,它可以允许你替换为任何类型(never 除外)
以使一种类型可以分配给另一种类型。
myObject.x.y.z;
// 每个 debug 函数的调用都是合法的,因为你可以将参数中的 any
替换为任何其他类型来进行匹配。
TypeScript 将会以不同形式来匹配 any 的位置,
例如将这些元组作为函数的参数:
declare function debug(value: any): void;
debug("a string");
debug(23);
debug({ color: "blue" });
// 对 swap 的调用是合法的,因为在将第一个 any 替换为 number,
第二个 any 替换为 string 后,参数可以正常被匹配到。
如果你没有了解过元组,查看: example:tuples
unknown 是 any 的同级别的类型,如果 any 代表着 ”我知道什么是正确的“,
那么 unknown 代表着 “我不确定什么是正确的,所以你需要将类型告诉 TypeScript”。
example:unknown-and-never
declare function swap(x: [number, string]): [string, number];
declare const pair: [any, any];
swap(pair);