2016-11-28 84 views
1

我必須聲明如何申報對象類型|無效

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

下面你可以找到一個void類型變量的聲明:

let unusable: void = undefined; 

你要記住,聲明void類型的變量是沒有用的,因爲你只能分配未定義或爲空給他們。

的更多信息: Basic Types in TS

2

您必須將對象轉換爲正確的類型和使用鴨打字。 TypeScript中的OR類型並不意味着對象會自動實現這兩個接口,只是它可以是任何類型,並且開發人員負責測試它。 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; 
}); 
+0

你也可以使用'instanceof',而不是屬性檢查嗎? – Fiddles

+1

@fiddles你不能在接口中使用instanceof –