我需要创建一个对象,其中将包含一个名为“state”的属性,该属性将具有通用类型,并且所有其他属性都将是具有覆盖上下文的函数。 我不确定是否可能,因此我决定在这里写下来。
以下是我的代码:
declare interface ContextModule<State> {
state: State
}
export declare interface SuperModule<State = any> {
state?: State | any,
[methodName: string]: (this: ContextModule<State>, ...args: any[]) => any
}
const lol = {
getFoo (): any {
return this.state.foo
}
} as SuperModule
在这段代码中,我没有任何错误。它可以成功执行,但是如果我添加
declare interface ContextModule<State> {
state: State
}
export declare interface SuperModule<State = any> {
state?: State | any,
[methodName: string]: (this: ContextModule<State>, ...args: any[]) => any
}
const lol = {
getFoo (): any {
return this.state.foo
},
+ state: { // added this property
+ foo: 'string'
+ }
} as SuperModule
然后我将会看到输出。
Conversion of type '{ getFoo(this: ContextModule<any>): any; state: { foo: string; }; }' to type 'SuperModule<any>' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
Property 'state' is incompatible with index signature.
Type '{ foo: string; }' is not comparable to type '(this: ContextModule<any>, ...args: any[]) => any'.
Type '{ foo: string; }' provides no match for the signature '(this: ContextModule<any>, ...args: any[]): any'.ts(2352)
我理解这个问题与TypeScript试图将属性
state
转换为[methodName: string]: (this: ContextModule<State>, ...args: any[]) => any
有关,但是为什么如果我在动态属性声明之前声明了这个属性呢?也许有人遇到过相同的问题。希望你能帮忙解决,谢谢!