TypeScript:根据返回类型推断参数类型

时间:2019-05-07 13:26:39

标签: typescript

是否可以定义一个函数wrap使其起作用?:

function wrap<Self>(
  creator: (self: Self) => Self
) {}

wrap(self => ({
  val: 2,

  func(): number {
    return self.val;
  }
}));

实际上是TypeScript在return self.val;处报错:

  

类型“ {}”上不存在属性“ val”。

我希望wrap的定义方式可以推断self的类型与函数的返回值相同。

1 个答案:

答案 0 :(得分:0)

问题在于Self只是一个泛型。编译器无法知道由Self表示的对象具有val属性(甚至根本没有任何属性;就其所知,它们只是{}类型)。

让它知道对Self会有什么期望:

interface HasVal {
    val: any;
}

function wrap<Self extends HasVal>(
    creator: (self: Self) => Self
) {}

wrap(self => ({
    val: 2,

    func(): number {
        return self.val;
    }
}));
相关问题