打字稿联盟类型:与接口
问题描述:
什么来处理,你有两个接口是非常相似,以至于你想通过同一块逻辑来运行它们的情况下正确的方法处理:打字稿联盟类型:与接口
interface DescriptionItem {
Description: string;
Code: string;
}
interface NamedItem {
Name: string;
Code: string;
}
function MyLogic(i: DescriptionItem | NamedItem) {
var desc = (<DescriptionItem>i).Description || (<NamedItem>i).Name;
return i.Code + ' - ' + desc;
}
这工作;不过,我的问题在于改进var desc = ...
系列。我有什么最好的选择?或者是否有更好的方法来处理Typescript中的这种情况?
答
TypeScript interfaces
仅在编译时存在,所以在运行时测试接口类型的操作并不多。您在问题中指定的代码很有意义,可能是您的最佳选择。
但是,如果能够灵活地改变你的interfaces
到classes
,您可以使用打字稿的类型卫士做更优雅的类型检查:
class DescriptionItem {
Description: string;
Code: string;
}
class NamedItem {
Name: string;
Code: string;
}
function MyLogic(i: DescriptionItem | NamedItem) {
let desc: string;
if (i instanceof DescriptionItem) {
desc = i.Description;
} else {
desc = i.Name;
}
return i.Code + ' - ' + desc;
}
我会说,你所采取的方式看起来很好。然而,问题本身主要是基于意见的,我将在此基础上投票结束。 :) – toskv