typescript - 为动态创建的类函数声明显式类型

标签 typescript

假设我有这门课:

class Foo {
  bar = this.createDynamicFunction((param: string) => {
    return "string" + param;
  });

  baz = this.createDynamicFunction((param: number) => {
    return 1 + param;
  });

  createDynamicFunction(fn: (param: any) => any) {
    return (param) => fn(param);
  }
}

const foo = new Foo()
foo.bar('baz') // => barbaz
foo.baz(2) // => 3

如何声明函数 Foo.prototype.barFoo.prototype.baz 的类型?我想明确表示 barbaz 分别接受并返回 stringnumber

我意识到这是一个人为的例子。对于某些上下文,我正处于重写消息队列客户端库之一的最后阶段,并且许多类函数是动态创建的。这些函数共享许多功能,但它们的输入/输出不同。

最佳答案

Generics是为此而设计的:

class Foo {
  bar = this.createDynamicFunction((param: string) => {
    return "string" + param;
  });

  baz = this.createDynamicFunction((param: number) => {
    return 1 + param;
  });

  createDynamicFunction<Type>(fn: (param: Type) => Type) {
    return (param : Type) => fn(param);
  }
}

const foo = new Foo()
//console.log(foo.baz(2)) // => 3
console.log(foo.bar('baz')) // => barbaz
console.log(foo.baz(2)) // => 3

您创建一个通用函数,其类型可以是任何类型。您可以根据该类型定义整体函数类型

Playground Link

关于typescript - 为动态创建的类函数声明显式类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70502989/

相关文章:

css - 在禁用的输入上更改自定义输入范围缩略图背景颜色

javascript - react 功能组件中的 typescript Prop 歧视

angular - 错误 : node_modules/@types/d3-dsv/index. d.ts(159,60):错误 TS1005:预期为 ','

generics - React 组件的推断通用类型

typescript - 如何在不删除 TypeScript 中的子类型的情况下从联合类型中删除更广泛的类型?

typescript - 运行 typescript 文件显示错误消息为 TS2304 : Cannot find name 'PropertyKey' & Error TS2339

reactjs - create-react-app typescript 不会运行 npm start

javascript - 如何在 React with Typescript 中使用 Material UI 自定义变体

typescript - 可以为 null 或未定义的属性导致 "does not exist"错误

TypeScript JavaScript + JSDoc @template 类型联合混淆