我有一个名为getUniqueId的方法,接受以下两种类型的接口,根据传入的接口类型,将返回唯一的id:
interface ReadOnlyInfo {
itemId: string;
....
}
interface EditInfo {
formId: number;
....
}
function getUniqueId (info: ReadOnlyInfo | EditInfo) {
if (info instanceof ReadOnlyInfo) {
return info.itemId;
}
return info.formId;
}
我在想在这里使用instanceof是一个好的做法。我的担忧是我可能会有很多类似于getUniqueId的其他方法,也接受"ReadOnlyInfo | EditInfo"类型,因此我必须在每个地方都重复"ReadOnlyInfo | EditInfo"。
与其这样做,我也尝试过使用type:
type CommonInfo = | ReadOnlyInfo | EditInfo;
因此,我可以节省一些代码(只需要做CommondInfo),就像下面这样,但是这种方式,我无法确定CommonInfo的类型,instanceof不再起作用并且会导致编译器错误。
function getUniqueId (info: CommonInfo) {
if (info instanceof ReadOnlyInfo) {
return info.itemId;
}
return info.formId;
}
我在想,在这种情况下设计接口/方法的最佳实践是什么。提前感谢!