我已经在我的班级中创建了这两个静态工厂方法:
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);
}
}
但是,我收到此编译错误消息:
重复的功能实现。
有什么想法吗?
答案 0 :(得分:2)
正如@cartant建议的那样,您可以在TypeScript中使用overloads。它们只有一个实现,但有多个签名。您可以在手册中阅读它,了解如何使签名和实现很好地协同工作。在您的情况下,您可以执行以下操作:
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
,我也不必手动指定{{1}的值1}}在调用T
构造函数时,因为构造函数从传入的参数中推断出<{1}}的值。
实际上,在这种情况下,它让我想知道您为什么要限制ConstantImpl<T>
仅接受T
和ConstantImpl.create()
值。为什么不去完整的通用路线呢?
boolean
希望有所帮助;祝你好运。
答案 1 :(得分:-1)
正如我在评论中所说,重载并没有在打字稿中实现,例如在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);
}
}
ps:我没有测试/编译过这个特定的函数,它只是一个可以存在的示例类型