打字稿-我可以动态设置函数的返回类型吗?

时间:2020-10-16 14:45:45

标签: typescript interface

是否可以使变量baz动态具有字符串类型?

type exampleType = () => ReturnType<exampleType>; // I need to return the type of any function I pass (Eg. ReturnType<typeof foo>)

interface IExampleInterface {
  bar: exampleType;
}

function foo(): string {
  return 'AAAAAAA';
}
const foobar = {
  bar: foo,
} as IExampleInterface;

const baz = foobar.bar();

baz; // Baz has type "any"

2 个答案:

答案 0 :(得分:2)

我不清楚接口的目标是什么。这是我能得到的最接近我想要的东西的

interface IExampleInterface<T extends () => any> {
  bar: () => ReturnType<T>;
}

function foo(): string {
  return 'AAAAAAA';
}
const foobar: IExampleInterface<typeof foo> = {
  bar: foo,
}

const baz = foobar.bar();

如果可以选择泛型推断,则typeof foo将是多余的。

答案 1 :(得分:0)

你太努力了。 TypeScript具有称为类型推断的功能,它将免费为您完成此操作。放下as IExampleInterface,它将“正常工作”

function foo(): string {
  return 'AAAAAAA';
}
const foobar = {
  bar: foo,
}

const baz = foobar.bar();

baz; // Baz has type "string"