TS2339:属性 在类型 {} 上不存在
TS2339: Property does not exist on type {}
请帮我解决这个编译错误。
下面您可以看到编译器抱怨第 20 行的 Actions 对象(为清楚起见,我在发布之前删除了几行)是 {}:
但是您可以在下面的 actions.ts 中看到 Actions 是 Actions[ 类型的对象=31=],并且它具有请求的 属性(这是一个函数):
并且在基本代码中,您可以在 DefinitelyTyped Alt 定义中看到 createActions 应该 return 类型的对象操作:
那么为什么 Typescript 抱怨 Actions 不是 Actions 类型?
您正在使用一个名为 "app/actions/actions"
的模块。该模块实际上不是一个模块(属性映射),但是 flux.createACtions(Actions)
:
的结果是什么
export = flux.createActions(Actions); // in actions.ts
那是什么 return?因为您没有为 <T>
指定泛型,并且因为 createActions
的参数没有正确包含可以推断的 T
,所以它假定 T
只是 {}
。这是 discussed here,最终被拒绝了。因此,如前所述,您需要指定泛型:
export = flux.createActions<Actions>(Actions);
但是为了避免这种情况,您可以将本地(或远程)alt.d.ts
更改为:
class Alt {
createActions<T extends ActionsClass>(con: ActionsClassConstructor<T>, ...): T;
}
type ActionsClassConstructor<T extends ActionsClass> = new (alt:Alt) => T;
这会添加根据您提供的构造函数正确推断所需的通用类型信息。
请帮我解决这个编译错误。
下面您可以看到编译器抱怨第 20 行的 Actions 对象(为清楚起见,我在发布之前删除了几行)是 {}:
但是您可以在下面的 actions.ts 中看到 Actions 是 Actions[ 类型的对象=31=],并且它具有请求的 属性(这是一个函数):
并且在基本代码中,您可以在 DefinitelyTyped Alt 定义中看到 createActions 应该 return 类型的对象操作:
那么为什么 Typescript 抱怨 Actions 不是 Actions 类型?
您正在使用一个名为 "app/actions/actions"
的模块。该模块实际上不是一个模块(属性映射),但是 flux.createACtions(Actions)
:
export = flux.createActions(Actions); // in actions.ts
那是什么 return?因为您没有为 <T>
指定泛型,并且因为 createActions
的参数没有正确包含可以推断的 T
,所以它假定 T
只是 {}
。这是 discussed here,最终被拒绝了。因此,如前所述,您需要指定泛型:
export = flux.createActions<Actions>(Actions);
但是为了避免这种情况,您可以将本地(或远程)alt.d.ts
更改为:
class Alt {
createActions<T extends ActionsClass>(con: ActionsClassConstructor<T>, ...): T;
}
type ActionsClassConstructor<T extends ActionsClass> = new (alt:Alt) => T;
这会添加根据您提供的构造函数正确推断所需的通用类型信息。