如何声明类型对象| void

时间:2016-11-28 13:58:49

标签: typescript

我有声明

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'.

如何描述这种类型?

2 个答案:

答案 0 :(得分:2)

您必须将对象强制转换为正确的类型并使用duck-typing。 TypeScript中的OR类型并不意味着对象自动实现两个接口,只是它可以是任何一种类型,并且开发人员可以使用onus来测试它。 https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-typeshttps://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