代码
const obj = {};
if ('a' in obj) console.log(42);
字符串
不是typescript(没有错误)。我明白为什么会这样了。另外,在TS 2.8.1中,“in”充当类型保护。
但是,有没有一种方法可以检查属性是否存在,但是如果属性没有在obj的接口中定义,则会出错?
interface Obj{
a: any;
}
型
我不是在说检查未定义的...
代码
const obj = {};
if ('a' in obj) console.log(42);
字符串
不是typescript(没有错误)。我明白为什么会这样了。另外,在TS 2.8.1中,“in”充当类型保护。
但是,有没有一种方法可以检查属性是否存在,但是如果属性没有在obj的接口中定义,则会出错?
interface Obj{
a: any;
}
型
我不是在说检查未定义的...
3条答案
按热度按时间ekqde3dh1#
您不会得到错误,因为您使用字符串来检查属性是否存在。
你会得到这样的错误:
字符串
如果你想对字符串属性进行类型检查,你可以添加index signatures using this example
ukqbszuj2#
下面的
handle
函数检查假设的服务器响应typesafe-way:字符串
Playground Link。函数
has
可能应该保存在一个单独的实用程序模块中。9fkzdhlc3#
您可以在hasOwnProperty周围实现自己的 Package 器函数,它可以进行类型收缩。
字符串
我在这里找到了这个解决方案:TypeScript type narrowing not working when looping
使用方法:
型
这种方法的局限性是,你只能得到一个记录与单一的关键字添加,你指定。这可能是罚款为某些需要,但如果你需要一个更通用的解决方案,那么我建议像Zod库,可以验证一个复杂的对象,并给你给予完整的类型:https://github.com/colinhacks/zod