关于用户定义类型保护的 typescript 手册将示例类型保护定义为
function isFish(pet: Fish | Bird): pet is Fish { return (<Fish>pet).swim !== undefined; }
箭头函数是否有相应的语法?
1qczuiv01#
TypeScript支持箭头函数类型保护(2017年可能没有)。下面的代码现在可以正常工作了。我在生产代码中经常使用这种风格:
const isFish = (pet: Fish | Bird): pet is Fish => (pet as Fish).swim !== undefined;
omqzjyyz2#
使用类型Assert而不是类型声明:
const isFish = (pet => !!pet.swim) as (pet) => pet is Fish
然而,考虑到它比较冗长,我更愿意将类型保护作为普通函数来编写,除非您确实需要this绑定,但这可能是代码的味道。
this
hmmo2u0o3#
是的,就像返回boolean一样,只需返回pet is Fish:
boolean
pet is Fish
const isFish: (pet: Fish | Bird) => pet is Fish = pet => (pet as Fish).swim !== undefined
Arrow函数被声明为单一类型((pet: Fish | Bird) => pet is Fish),而不是分别声明参数和返回类型。
(pet: Fish | Bird) => pet is Fish
0x6upsns4#
作为替代方案,这也可以
const isFish = (pet: any): pet is Fish => !!pet.swim;
或者你想更明确地说
const isFish = (pet: any): pet is Fish => pet.swim === 'function';
尽管也可以针对特性进行测试
const isFish = (pet: any): pet is Fish => pet.hasOwnProperty('genus');
rfbsl7qr5#
这对我很有效:
const importList = children.filter( (node): node is MeshFullType<Mesh.Import> => code.isMeshFullType(node, Mesh.Import), )
5条答案
按热度按时间1qczuiv01#
TypeScript支持箭头函数类型保护(2017年可能没有)。下面的代码现在可以正常工作了。我在生产代码中经常使用这种风格:
omqzjyyz2#
使用类型Assert而不是类型声明:
然而,考虑到它比较冗长,我更愿意将类型保护作为普通函数来编写,除非您确实需要
this
绑定,但这可能是代码的味道。hmmo2u0o3#
是的,就像返回
boolean
一样,只需返回pet is Fish
:Arrow函数被声明为单一类型(
(pet: Fish | Bird) => pet is Fish
),而不是分别声明参数和返回类型。0x6upsns4#
作为替代方案,这也可以
或者你想更明确地说
尽管也可以针对特性进行测试
rfbsl7qr5#
这对我很有效: