是否可以从Typescript中的非构造函数方法参数推断出通用类类型?

时间:2018-11-17 14:47:15

标签: typescript

A-构造方法案例

当我要从构造函数方法参数推断通用类类型时:

int[] result = new int[counter]
for (int j = 0; j < counter; j++) {
    result[j] = combined[j];
}

按预期,我得到2 errors

  • interface ObjectAsMap { [key: string]: boolean } interface MyClass<T extends ObjectAsMap> { data: T constructor(data: T): MyClass<T> } class MyClass<T extends ObjectAsMap> { constructor(data: T) { this.data = data } } const a = new MyClass('Wrong parameter type') const b = new MyClass({ first: true, second: false, }) console.log(b.data.first) console.log(b.data.wrongProperty) 触发new MyClass('Wrong parameter type')
  • Argument of type '"Wrong parameter type"' is not assignable to parameter of type 'ObjectAsMap'.触发b.data.wrongProperty

B-非构造方法案例

现在,如果我想从非构造方法中触发完全相同的预期行为:

Property 'wrongProperty' does not exist on type '{ first: true; second: false; }'.

我只得到the first error

  • interface ObjectAsMap { [key: string]: boolean } interface MyClass<T extends ObjectAsMap> { data: T declare(data: T): MyClass<T> } class MyClass<T extends ObjectAsMap> { public data: T public declare(data: T) { this.data = data return this } } const myClassInstance = new MyClass() const a = myClassInstance.declare('Wrong parameter type') const b = myClassInstance.declare({ first: true, second: false, }) console.log(b.data.first) console.log(b.data.wrongProperty) 触发myClassInstance.declare('Wrong parameter type')

Argument of type '"Wrong parameter type"' is not assignable to parameter of type 'ObjectAsMap'.也应该触发错误,因为b.data.wrongProperty中不存在此属性。当我将鼠标悬停在b#data上方时,它告诉我b.data而不是(property) MyClass<ObjectAsMap>.data: ObjectAsMap


问题

是否可以像在情况A中那样在情况B中推断参数类型?

1 个答案:

答案 0 :(得分:2)

您只需要添加一个额外的type参数即可捕获通话中lrelease eng-fr.ts eng-chs.ts 的实际类型

data