我在nodejs项目中使用typescript
5.1.6
。我有以下代码:
export interface ExecutionResult<TData = { [key: string]: any }, TExtensions = { [key: string]: any }> {
errors?: ReadonlyArray<any>;
data?: TData | null;
extensions?: TExtensions;
}
export interface MyExecutionResult<
TData = {
[key: string]: any;
},
> extends ExecutionResult {
data?: TData | null;
}
它有一个接口
ExecutionResult
,我在MyExecutionResult
中扩展了它。但它给了我编译错误 MyExecutionResult
:
Interface 'MyExecutionResult<TData>' incorrectly extends interface 'ExecutionResult<{ [key: string]: any; }, { [key: string]: any; }>'.
Types of property 'data' are incompatible.
Type 'TData | null | undefined' is not assignable to type '{ [key: string]: any; } | null | undefined'.
Type 'TData' is not assignable to type '{ [key: string]: any; } | null | undefined'.
Type 'TData' is not assignable to type '{ [key: string]: any; }'.ts(2430)
如果我在
extends
上使用TData
,效果很好,如下所示:
export interface MyExecutionResult<
export interface MyExecutionResult<
TData extends {
[key: string]: any;
},
> extends ExecutionResult {
data?: TData | null;
}
我不明白为什么当我使用
TData = ...
时它会抱怨代码?在这种情况下,我认为 =
和 extends
之间没有太大区别。
您必须将
TData
泛型传递给您扩展的类型
export interface MyExecutionResult<
TData = {
[key: string]: any;
},
> extends ExecutionResult<TData> {
data?: TData | null;
}