我有声明
export interface IValidationError {
valid: boolean;
message: string;
}
export type ValErr = IValidationError | void;
代码中的某个地方
...
.filter(function(valErr:ValErr){
return !valErr || valErr.valid;
});
问题是我在编译期间遇到错误
error TS2339: Property 'valid' does not exist on type 'IValidationError | void'.
如何描述这种类型?
答案 0 :(得分:2)
您必须将对象强制转换为正确的类型并使用duck-typing。 TypeScript中的OR类型并不意味着对象自动实现两个接口,只是它可以是任何一种类型,并且开发人员可以使用onus来测试它。 https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types和https://basarat.gitbooks.io/typescript/content/docs/types/discriminated-unions.html
.filter(function(valErr:ValErr){
if (valErr && valError.hasOwnProperty("valid") ) {
return (<IValidationError> !valErr).valid;
}
return true;
});
答案 1 :(得分:0)
您可以在下面找到void类型变量的声明:
let unusable: void = undefined;
您必须记住,声明void类型的变量没有用,因为您只能为它们分配undefined或null。
更多信息: Basic Types in TS