当我要从构造函数方法参数推断通用类类型时:
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
现在,如果我想从非构造方法中触发完全相同的预期行为:
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中推断参数类型?
答案 0 :(得分:2)
您只需要添加一个额外的type参数即可捕获通话中lrelease eng-fr.ts eng-chs.ts
的实际类型
data