跳转到内容

字面量推断

字面量推断是 TypeScript 中的一项功能,允许根据变量或参数的值推断其类型。

在下面的示例中,我们可以看到 TypeScript 认为x文字类型是因为该值以后不能随时更改,而y被推断为字符串,因为它以后可以随时修改。

const x = 'x'; // x 为字面量类型, 因为值不能改变
let y = 'y'; // string, 我们能改变这个值

在下面的示例中,我们可以看到 o.x 被推断为 string(而不是字面量的a),因为 TypeScript 认为该值可以在以后随时更改。

type X = 'a' | 'b';
let o = {
x: 'a', // 这是一个更宽的 string
};
const fn = (x: X) => `${x}-foo`;
console.log(fn(o.x)); // 'string' 类型的参数不能赋值给 'X' 类型的参数

正如你所看到的代码在传递 o.xfn 作为一个狭窄类型时,抛出了一个错误。

我们能通过使用 const 或者 X 来借助类型推断解决这个问题:

let o = {
x: 'a' as const,
};

or:

let o = {
x: 'a' as X,
};