Typescript:重複的函數實作訊息
我在我的類別中創建了這兩個靜態工廠方法:
export class ConstantImpl<T> {
public static create(b: Boolean): Constant<Boolean> {
return new ConstantImpl<Boolean>(b);
}
public static create(i: Number): Constant<Number> {
return new ConstantImpl<Number>(i);
}
}
然而,我收到這個編譯錯誤訊息:
函數實現重複。
有什麼想法嗎?
答案#1
正如 @cartant 建議的,你可以在 TypeScript 中使用重載。它們有單一的實現但多個簽名。你可以在手冊中閱讀如何讓簽名和實現協同工作。在你的情況下,你可以這麼做:
export class ConstantImpl<T> {
// guessing at your constructor
public constructor(public val: T) {
}
public static create(b: boolean): Constant<boolean>;
public static create(i: number): Constant<number>;
public static create(v: boolean | number): Constant<boolean | number> {
return new ConstantImpl(v);
}
}
這只會允許 ConstantImpl.create() 接受 boolean 或 number 值,並且會拒絕其他所有值。請注意,我不需要檢查 v 的類型來判斷它是否為 boolean 或 number,也不需要在調用 ConstantImpl<T> 構造函數時手動指定 T 的值,因為構造函數會根據你傳入的參數 推斷 T 的值。
而且,事實上,在那種情況下,這讓我想知道為什麼你要限制 ConstantImpl.create() 僅接受 boolean 和 number 值。為什麼不走完全通用的路線呢?
// accept any type
public static create<T>(v: T): Constant<T> {
return new ConstantImpl(v);
}
希望那有幫助;祝你好運。
答案#2
正如我在評論中所說,函數重載在 TypeScript 中並不像在 JAVA 中那樣實現
你可以試試那樣的東西
export class ConstantImpl<T> {
public static create(a: any): Constant<any> {
if(typeof a == "Boolean")
return ConstantImpl.createBoolean(a);
if(typeof a == "Number")
return ConstantImpl.createNumber(a);
}
public static createBoolean(b: Boolean): Constant<Boolean> {
return new ConstantImpl<Boolean>(b);
}
}
附註:我沒有測試/編譯這個特定的函數,它只是一個示例,類型可以存在
