【问题标题】:Declare explicit types for a dynamically created class function为动态创建的类函数声明显式类型
【发布时间】:2022-01-26 20:40:52
【问题描述】:

假设我有这门课:

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

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    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
    

    您创建一个generic 函数,其类型可以是任何值。您可以根据该类型

    定义您的整体函数类型

    Playground Link

    【讨论】:

    • 太棒了!谢谢!
    猜你喜欢
    • 2019-01-30
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多