问题: 我正在尝试创建一个类型防护,它应检查类型未知的属性上是否存在某些值。
interface TestProps {
count: number;
}
const getIsTestShown = (test: unknown): test is TestProps => {
if (test && typeof test === "object") {
if ("count" in test) {
if (typeof test.count === "number") { // ERROR: Property 'count' does not exist on type 'object'.ts(2339)
return true;
}
}
}
return false;
};
上面的示例已简化,但恰好代表了我的问题。 Typescript似乎不了解如果 "count" in test
为true,则应在测试中访问count。
我想念什么?
答案 0 :(得分:0)
您可以尝试以下方法:
interface TestProps {
count: number;
}
const getIsTestShown = (test: any): test is TestProps => {
return typeof test?.count === "number" ?? false;
};
console.log(getIsTestShown({})) // false
console.log(getIsTestShown({ count: 1 })) // true
console.log(getIsTestShown({ count: "1" })); // false
console.log(getIsTestShown({ someOtherProp: "1" })); // false
如果linters告诉您不要使用any
,由于您已经在检查属性和类型的存在,我建议对特定功能禁用它们。
编辑:Here是一个更详细的示例,说明如何使用unknown
以及为什么它不像any
那样起作用。