当我声明一个常量字符串时,打字稿给出它的文字类型
const x = 'X' // x is of 'X' type
所以我收到以下错误
let y: typeof x = 'Y' // error Type '"Y"' is not assignable to type '"X"'
但是为什么当我在 if 语句或 console.log 中检查它时我得到字符串?
if (typeof x === 'X') console.log('OK') // types '"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"' and '"X"' have no overlap
console.log(typeof x) // string
谢谢
typeof
运算符 与 TypeScript 的类型级别 typeof
运算符几乎没有关系。
前者可以用于任何值,并且 TypeScript 错误消息已经告诉你它可以在运行时计算出什么结果——一个字符串:
“字符串”| “数字”| “bigint” | “布尔值” | “符号”| “未定义” | “对象”| 「功能」
后者只能用于变量和属性,并在类型检查时计算为类型。
只需将它们视为两个具有相同名称的不同运算符,就像 JavaScript 中的
|
是按位或,以及 TypeScript 中类型级别的类型联合。