如何在`typescript`中使用泛型类型扩展接口?

问题描述 投票:0回答:1

我在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
之间没有太大区别。

node.js typescript
1个回答
0
投票

您必须将

TData
泛型传递给您扩展的类型

export interface MyExecutionResult<
    TData = {
    [key: string]: any;
  },
> extends ExecutionResult<TData> {
  data?: TData | null;
}
© www.soinside.com 2019 - 2024. All rights reserved.