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