Typescript 自动为字段或属性创建用户定义的类型保护?
在使某些代码严格兼容模式时,我经常遇到如下模式:Typescript 自动为字段或属性创建用户定义的类型保护?,typescript,Typescript,在使某些代码严格兼容模式时,我经常遇到如下模式: 接口项{ foo?:foo; } 接口Foo{ 酒吧:字符串; } 声明常量项:项[]; items.filter(item=>!!item.foo.map(item=>item.foo.bar);//错误!item.foo可能未定义 这会在--stricnullchecks中创建错误,因为定义了item.foo的信息不会传播 总的来说,我一直在创建一次性的防护装置来处理类似的事情 函数hasFoo(item:item):item是item&{
接口项{
foo?:foo;
}
接口Foo{
酒吧:字符串;
}
声明常量项:项[];
items.filter(item=>!!item.foo.map(item=>item.foo.bar);//错误!item.foo可能未定义
这会在--stricnullchecks
中创建错误,因为定义了item.foo
的信息不会传播
总的来说,我一直在创建一次性的防护装置来处理类似的事情
函数hasFoo(item:item):item是item&{foo:foo}{
return!!item.foo;
}
items.filter(hasFoo.map)(item=>item.foo.bar);
但对于我使用此模式的每一种类型,都需要定义大量的自定义代码。有没有办法编写一个返回自定义类型保护的函数
我想写一些像这样的东西:
items.filter(hasField('foo')).map(item=>item.foo.bar);
您可以编写一个高阶函数,返回用户定义的类型保护。您可能会认为这是用户定义的类型守护工厂。
函数hasField(键:K){
退货(项目:T):项目为(T&Required)=>{
返回项的类型[键]!==“未定义”;
}
}
其用法如下:
items.filter(hasField('foo')).map(items=>items.foo.bar);
这将断言给定的字段是可用的,并且它不是未定义的