我写了一些代码来做一些运行时类型测试:
var x = window.opener;
if (typeof x === 'null') {
// Do something
}
var y = getSomething();
if (typeof y === 'MyClass') {
// ...
} else if (typeof y === 'array') {
// ...
}
我在所有if
表达式上都出现了此错误:
错误TS2365:操作员' ==='不能应用于类型"" string" | "数" | "布尔" | "符号" | "未定义" | "对象" | "功能"'和'" null"'。
这是TypeScript错误吗?为什么它不允许我像我想要的那样使用typeof
?
答案 0 :(得分:10)
typeof
的作用!typeof operator接受一个表达式并返回以下值之一*:
"string"
"number"
"boolean"
"symbol"
"undefined"
"object"
"function"
您将不看到typeof
生成"null"
,"Array"
等值或用户定义类的名称。请注意,sad reasons typeof null
为"object"
。
所以你认为typeof
比以前更冷。哦,好吧!
null
,请使用expr === null
。如果您的同事允许您使用expr == null
undefined
来测试null
和==
Array.isArray(expr)
。请注意,您期望成为阵列的某些内容(例如document.getElementsByTagName("div")
)不会(getElementsByTagName
返回NodeList
),所以要小心expr instanceof ClassName
如果你确定你有一个产生不同值的对象和运行时组合(例如,你实际测试过它,它确实产生了一些其他字符串),那么在测试的任一侧使用一个类型断言:
if (typeof x === <string>"magicthinger") {
*
在古代浏览器(IE8)中查询某些异域浏览器对象的typeof
时,您可能会获得其他值,但没有现代JavaScript引擎可以执行此操作。