我做了什麼,似乎是有效的打字稿(遊樂場鏈接和嵌入以及)這個例子: http://www.typescriptlang.org/Playground/#src=interface%20I1%20%7B%0A%09%09get(name%3A%20%22templatePath%22)%3A%20string%3B%0A%09%09get(name%3A%20string)%3A%20any%3B%09%0A%7D%0A%0Ainterface%20I2%20%7B%0A%09%09get(name%3A%20%22baseClass%22)%3A%20string%3B%0A%09%09get(name%3A%20string)%3A%20any%3B%0A%7D%0A%0Ainterface%20I3%20extends%20I1%2C%20I2%20%7B%0A%09%0A%7D%0A%0Aclass%20C3%20implements%20I3%20%7B%0A%09%09get(name%3A%20string)%20%7B%0A%09%09%09return%20name%3B%0A%09%09%7D%09%0A%7D如何使用兩個描述「get」函數的打字稿0.9.5接口?
interface I1 {
get(name: "templatePath"): string;
get(name: string): any;
}
interface I2 {
get(name: "baseClass"): string;
get(name: string): any;
}
interface I3 extends I1, I2 {
}
class C3 implements I3 {
get(name: string) {
return name;
}
}
我得到一個錯誤指示類型的財產「得到」不是這兩個接口相同。 (1)我不明白這很重要,(2)我不知道如何解決這個問題。
具體我界面看起來是這樣的:
interface IGotoPane extends dijit._WidgetBase, dijit._TemplatedMixin, dijit._WidgetsInTemplateMixin {
inputCoordinates: dijit._Widget;
}
我發現我可以通過重新聲明幾種方法消除編譯器錯誤:
interface I3 extends I1, I2 {
get(name: string): any;
}
或在我具體的情況下,問題,
interface IGotoPane extends dijit._WidgetBase, dijit._TemplatedMixin, dijit._WidgetsInTemplateMixin {
inputCoordinates: dijit._Widget;
get(name: string): any;
set(name: string, value: any, raiseChangeEvent?: boolean): void;
set(values: Dojo.PropertiesMap): void;
watch(prop: string, callback: Dojo.WatchCallback<any>): Dojo.WatchHandle;
}
爲什麼這是必要的?
謝謝。你的例子是一個很好的例子,我可以看到在這種情況下的含糊不清,但在「獲得」的情況下,似乎顯然應該優先考慮專門的「get」。但是沒有優先權,因此I1.get2和I2.get1會變得模糊不清?我沒有完全看到編譯器問題,但也許這就是你能夠推斷簡單情況的意思。 –
不是說我的直覺與你的問題有任何關係,而是我認爲I3會採用這種形式:get(name:「templatePath」):string; get(name:「baseClass」):string; get(name:string):any;所以在你的例子中,我會假設返回類型是一個數字(「y」beats「x」): 接口I3 foo(a:string,b:「y」):number; (a:「x」,b:string):boolean; foo(a:string,b:string):any; } –