我已经在我的类中创建了这两个静态工厂方法:
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);
}
}
但是,我收到此编译错误消息:
Duplicate function implementation.
有什么想法吗?
最佳答案
正如@cartant 所建议的,您可以使用 overloads在 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
值(value),它会拒绝一切。请注意,我不必检查 v
的类型查看它是否是 boolean
或 number
,我也不必手动指定 T
的值在调用 ConstantImpl<T>
构造函数,因为构造函数推断 T
的值来自你传入的参数。
真的,在那种情况下,我想知道你为什么要限制 ConstantImpl.create()
只接受 boolean
和 number
值。为什么不走完整的通用路线呢?
// accept any type
public static create<T>(v: T): Constant<T> {
return new ConstantImpl(v);
}
希望对您有所帮助;祝你好运。
关于 typescript :重复的函数实现消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393643/