2016-07-27 89 views
6

我使用typescript2.0.0--strictNullChecks和以下類型的後衛:逆打字稿型導引

function isNotOk(value: any): value is null | undefined { 
    if (typeof value === 'number') { 
    return !isFinite(value); 
    } else { 
    return value === null || value === undefined; 
    } 
} 

其中nullundefinedNaNInfinite無效。我想要一個反例:

export function isOk(value: any): value is not null | undefined { 
    return !isNotOk(value); 
} 

當然,這種語法不起作用。有沒有一種已知的方法來實現這一點?

+0

您是否已經啓用了嚴格的空檢查? –

+0

是的,'strictNullChecks'已啓用。我會更新這個問題來澄清。 –

+0

爲什麼不會{return(typeof value ==='number')? isFinite(value):(value!== null && value!== undefined);}工作?空檢查有問題嗎? –

回答

9

我偶然發現了答案;仿製藥。只需以相反的方式縮小爲:

function isOk<T>(value: T | null | undefined): value is T { 
    return !isNotOk(value); 
} 
+1

唯一的問題是如果'T'是'any' - 那麼類型後衛的'else'部分認爲'value'是'never',但它應該是'null | undefined'。 –