我的参数类型为
((element: any) => Type<any>) | Type<any>
如果它是一个函数,我需要调用它,否则明智的做法是按原样使用Type
getType(element: any, type: ((element: any) => Type<any>) | Type<any>): Type<any> {
return isFunctionNotType(type) ? type(element) : type;
}
不幸的是,我不确定如何编写isFunctionNotType
方法。 isType
中有一个@angular/core/src/type
方法,但是每当我尝试使用该方法时,在编译过程中都会收到以下错误消息
ERROR in C:/Users/xxxxxx/xxxxxx/xxxxxx/dist/xxxxxx/fesm5/angular-utils.js
Module not found: Error: Can't resolve '@angular/core/src/type' in 'C:\Users\xxxxxx\xxxxxx\xxxxxx\dist\xxxxxx\fesm5'
是否有某种方法可以使此工作正常而不必将type
变量分解为两个?
编辑:我应该指出,因为人们似乎在这里遗漏了要点。在成角度的Type
中扩展了Function
,在运行时您将无法仅通过执行instanceof
或类似的操作来区分它们。
答案 0 :(得分:0)
(typeof回调===“函数”)
我会检查它是否具有功能,然后为其他类型加上“ else”。
答案 1 :(得分:0)
type TypeFn<T> = (element: T) => Type<T>;
function isFunctionNotType<T>(type: TypeFn<T> | Type<T>): type is TypeFn<T> {
return typeof type === 'function';
}
function getType<T>(element: T, type: TypeFn<T> | Type<T>): Type<T> {
return isFunctionNotType(type) ? type(element) : type;
}
isFunctionNotType
返回类型type is TypeFn<T>
给出一个布尔值,并将推断返回类型。
请注意,我添加了泛型,可能不合适,因此在这种情况下,请删除它们。