传递对象参数,然后以TypeScript返回此对象

z9smfwbn  于 2023-01-06  发布在  TypeScript
关注(0)|答案(1)|浏览(108)

我试图在TypeScript中“扩展”一个函数,但找不到正确的方法。

const fn1 = function () {
  return {
    extend(obj1: { [name: string]: Function }) {
      return {
        test1() {},
        ...obj1
      }
    }
  }
}
const var1 = fn1().extend({ test2: function () {} });

var1.test1()
var1.test2() // Property 'test2' does not exist on type '{ test1(): void; }'. Did you mean 'test1'?

我能做些什么来让它工作呢?

62o28rlo

62o28rlo1#

extend添加泛型类型就足够了。

const fn1 = function () {
  return {
    extend<F extends Record<string, Function>>(obj1: F) {
      return {
        test1() {},
        ...obj1
      }
    }
  }
}

F将存储传递给函数的对象的类型,编译器足够聪明,可以计算出正确的返回类型,所以我们不必提供。

const var1 = fn1().extend({ test2: function () {} });
//    ^? const var1: { test1(): void; } & { test2: () => void; }

var1.test1()
var1.test2()

Playground

相关问题