我有类型别名,如下所示
export type Abc = string;
export type Efg = <T>(item: T): Abc
现在我在下面使用它:
export interface SomeInterface<T> {
someField: (item?: T) => Abc;
}
我有一个接收Efg
的方法。
someMethod(methodToCall: Efg);
现在,当我尝试像这样调用someMethod
时,我收到错误
obj.someMethod(someInterfaceObject.someField);
TS2345:类型
(item?: T) => string
的参数不能分配给'Efg'类型的参数。参数'item'和'item'的类型不兼容。类型“T”不能分配给“T”类型。存在两种具有此名称的不同类型,但它们是不相关的。
请注意,这适用于typescript 1.8.9,但我正在升级到typescript 2.4.2。另请注意,我还尝试在item?: T
类型中创建项目可选项(例如Efg
),在SomeInterface.someField
中强制使用项目,但它会给我同样的错误。
答案 0 :(得分:0)
为了使obj.someField
符合SomeInterface.someField
,obj.someField
必须是通用的。以下是一个工作示例:
export type Abc = string;
export type Efg = <T>(item: T) => Abc;
export interface SomeInterface { someField: <T>(item: T) => Abc; }
declare class Foo {
someMethod(methodToCall: Efg): any;
}
declare const obj: SomeInterface;
new Foo().someMethod(obj.someField); // works