1
什麼導致此代碼失敗?Typescript中的接口上的類級通用約束
interface ISomeData {
name: string;
}
class SomeData implements ISomeData {
name: string = "adam";
}
class SomeClass<T extends ISomeData> {
constructor(dataTemplate?: T) {
this.dataTemplateInternal = dataTemplate;
}
private dataTemplateInternal: T;
public initSomeData() : T {
let data: T = new SomeData();
if (this.dataTemplateInternal) {
return this.dataTemplateInternal;
}
return data;
}
}
的「initSomeData」第一行有一個錯誤,說
類型「SomeData」是不能分配給輸入「T」
但因爲我的通用的限制是基於SomeData實現的接口應該不夠嗎?
Ridiculously long link to this code in the TypeScript Playground
謝謝,原來如此!我有點想這就是我需要做的,不知道爲什麼我不試試它! –
就像一個側面問題,不是約束,指出「你的實現必須是[THIS]的最小值」(在我的情況下'接口ISomeData {名稱:字符串}'),並沒有實現該接口,以確保它有「名稱:字符串」?我仍然不明白爲什麼它不會在這裏隱含地理解我的意圖。這是通過設計,還是像語言規範中的「待辦事項」? :)不過,你搖滾,謝謝! –
是的,通用約束保證'name'存在於'T'中,但**'T' **不是**'ISomeData',所以編譯器會警告你。如果你有一個'SomeClass'的實例,那麼'initSomeData'的結果應該是'IMoreData'類型而不是'ISomeData' –