0
我已經在TypeScript中定義了一個類型Filter
,它可以是string
,RegExp
或Predicator
,這是一個函數。類型定義如下。TypeScript中的函數類型警衛
export type Predicator = (input: string) => boolean;
export type SingleFilter = string | RegExp | Predicator;
有一個函數以SingleFilter
作爲輸入。但是,只要RegExp
主張,類型警衛似乎不能與Predicator
一起工作。 但是,如果僅僅是string | Predicator
,問題就消失了。
function singlePredicator(value: any) {
if (typeof value === 'string') {
// do something for string
}
else if (value instanceof RegExp) {
// do something
}
else {
// do something for function
// Error TS2349: Cannot invoke an expression whose type lacks a call signature.
value(foo);
}
}
是否有任何解決方案,使其在我的情況下工作?謝謝。我正在使用tsc
1.5.3
非常感謝,它現在有效。但是,仍然有什麼辦法讓職業警衛在職能上工作? – Haocheng
如果你有一個聯合類型的'string | Function',它會按預期工作。 http://bit.ly/1NAKB3B - 同樣適用於'string | number | Function',所以問題源於RegExp的instanceof檢查。 – Fenton
謝謝,這對我的情況是有意義的:) – Haocheng