1
鑑於以下打字稿代碼如何使用TypeScript中的類使用函數重載?
class NumberChecker { }
class StringChecker { }
class Component {}
class ComponentChecker { }
class Grid { }
class GridChecker { }
function check(element: number): NumberChecker;
function check(element: string): StringChecker;
function check(element: Grid): GridChecker;
function check(element: Component): ComponentChecker {
if (typeof element === 'number') {
return new NumberChecker();
}
if (typeof element === 'string') {
return new StringChecker();
}
if (element instanceof Component) {
return new ComponentChecker();
}
if (element instanceof Grid) {
return new GridChecker();
}
}
const a = check(2); // a is NumberChecker
const b = check('sdf'); // b is StringChecker
const c = check(new Component()); // c is GridChecker
const d = check(new Grid()); // d is GridChecker
爲什麼c
和d
都GridChecker
?我期待c
是ComponentChecker
。
您應該嘗試使用不同的定義。那些'Component'和'Grid'目前是兼容的。 –
只是試圖給這兩個類添加不同的屬性,並得到編譯錯誤'重載簽名與函數實現不兼容'。我不知道如何解決。 – goenning
但這是一個很好的觀點。每個Checker類都有不同的方法。如果我嘗試添加它們,我會遇到更多編譯錯誤。我雖然返回類型不必相互兼容。 – goenning