首页 > 解决方案 > 如何扩展传递参数类型的函数的返回类型?

问题描述

我正在尝试定义一个从现有函数的返回类型扩展属性的接口。但是该函数的返回类型由参数类型定义。类似于下面的代码:

function doSomething<T: any>(myParameter: T): { myProperty: T };
interface MyInterface<A> extends ReturnType<typeof doSomething<A>> {
  newProperty1: boolean;
  newProperty2: boolean;
}

然后,当我使用接口时,我想推断函数的参数类型,比如

let something: MyInterface<number>;

导致类似的类型

{
  myProperty: number,
  newProperty1: boolean,
  newProperty2: boolean,
}

我怎样才能做到这一点?

标签: typescript

解决方案


可悲的是,我认为您不能重用doSomething. 作为一种解决方法,您可以使用接口重新定义它。

interface MyCallSignature<T> {
  (myParameter: T): {
    myParameter: T
  }
}

interface MyInterface<T> extends ReturnType<MyCallSignature<T>> {
  newProperty1: boolean;
  newProperty2: boolean;
}

declare let something: MyInterface<number>;

something.myProperty; // number
something.newProperty1; // boolean
something.newProperty2; // boolean

推荐阅读