[英]Typescript: How to check interface type
我有一个 getUniqueId 方法,它接受下面两种接口,它将根据传递的接口类型返回 uniqueId:
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 CommonInfo = | ReadOnlyInfo | EditInfo;
所以,我可以保存一些代码(只做 CommondInfo),如下所示,但那样的话,我无法分辨 CommonInfo 是哪种类型,instanceof 不再有效并给我编译器错误。
function getUniqueId (info: CommonInfo) {
if (info instanceof ReadOnlyInfo) {
return info.itemId;
}
return info.formId;
}
所以,我想知道在这种情况下设计接口/方法的最佳实践是什么。 提前致谢!
Typescript 中的接口只是 ide 的语法糖。 不可能像其他语言一样检查接口类型。 以 C# 为例。
但是使用类型保护,您可以识别正在使用的接口。
interface ReadOnlyInfo {
itemId: string;
....
}
interface EditInfo {
formId: number;
....
}
function getUniqueId (info: ReadOnlyInfo | EditInfo) {
if (isReadOnlyInfo(info)) return info.itemId;
if (isEditInfo(info)) return info.formId;
}
function isReadOnlyInfo(item: any): item is ReadOnlyInfo {
return 'itemId' in item;
}
function isEditInfo(item: any): item is EditInfo {
return 'formId' in item;
}
通过这种方式,您可以获得更好的 ide 支持
In TypeScript, you can use the getPrototypeOf operator to check the type of an interface object. For example:
interface MyInterface {
prop1: string;
prop2: number;
}
const myObject: MyInterface = { prop1: 'hello', prop2: 42 };
console.log(myObject && (Object.getPrototypeOf(myObject) === MyInterface.prototype))
// true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.