我有这段代码,其行为符合我的预期:
if (!groupRef) {
throw new Error('a group ref is required to get dimenstions in ActivityLabel');
}
const bBox = groupRef.current.getBBox();
groupRef可以是未定义的,但是可以在if表达式满足打字稿的情况下检查其是否存在,以免引发编译器错误Object is possibly 'undefined'
我还使用invariant来断言第一个参数是真实的或引发异常。
但是打字稿并没有意识到这应该确保它的存在:
invariant(!!groupRef, 'a group ref is required to get dimenstions in ActivityLabel');
const bBox = groupRef.current.getBBox();
不变式的类型定义是这样的:
declare let invariant:invariant.InvariantStatic;
export = invariant;
export as namespace invariant;
declare namespace invariant {
interface InvariantStatic {
(testValue:any, format?:string, ...extra:any[]):void;
}
}
它声明该函数返回void。
无论如何,我是否像不变的throw
代码一样,用不变的类型定义告诉打字稿?