我写了一些代码来做一些运行时类型测试:
var x = window.opener;
if (typeof x === 'null') {
// Do something
}
var y = getSomething();
if (typeof y === 'MyClass') {
// ...
} else if (typeof y === 'array') {
// ...
}
我在所有 if
表达式上都遇到了这个错误:
error TS2365: Operator '===' cannot be applied to types '"string" | "number" | "boolean" | "symbol" | "undefined" | "object" | "function"' and '"null"'.
这是 TypeScript 错误吗?为什么它不允许我像我想的那样使用 typeof
?
最佳答案
这不是typeof
会!
typeof operator接受一个表达式并返回以下值之一*:
-
"string"
-
"number"
-
"boolean"
-
"symbol"
-
"undefined"
-
"object"
-
"function"
你不会看到typeof
产生类似 "null"
的值, "Array"
,或用户定义类的名称。注意 typeof null
是"object"
对于 sad reasons .
糟糕!我该怎么办?
所以你想typeof
比以前更酷了。好吧!
- 测试
null
, 使用expr === null
.您可以使用惯用的expr == null
测试undefined
和null
如果你的同事让你逃脱使用==
- 要测试数组,请使用
Array.isArray(expr)
.请注意,有些东西您希望是数组,例如document.getElementsByTagName("div")
, 不是(getElementsByTagName
返回NodeList
),所以要小心 - 要测试类类型,请使用
expr instanceof ClassName
我遇到了 99 个问题,IE8 是其中之一
如果您真的确定您有一个对象和运行时组合会产生不同的值(例如,您实际测试了它,并且它确实产生了一些其他字符串),请在测试的任一侧使用类型断言:
if (typeof x === <string>"magicthinger") {
*
在古代 浏览器 (IE8) 中查询 typeof
对于一些奇特的浏览器对象,您可能会得到其他值,但没有现代 JavaScript 引擎可以做到这一点。
关于typescript - 为什么我不能在 TypeScript 中将 `typeof x` 与 "null"或 "MyClass"进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102434/