Javascript条件内部TypeScript接口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript条件内部TypeScript接口相关的知识,希望对你有一定的参考价值。
是否可以在TypeScript中的接口声明中包含条件。我正在寻找的是一种方式,根据第一个键的值,第二个键可以是这些值。
示例(不起作用):
interface getSublistValue {
/** The internal ID of the sublist. */
sublistId: 'item' | 'partners';
/** The internal ID of a sublist field. */
if (this.sublistId === 'item') {
fieldId: 'itemname' | 'quantity';
}
if (this.sublistId === 'partners') {
fieldId: 'partnername' | 'location';
}
}
答案
不,没有。最好的办法是创建描述两种不同类型数据的独立接口。
例如:
interface SublistItem {
sublistId: 'item';
fieldId: 'itemname' | 'quantity';
}
interface SublistPartners {
sublistId: 'partners';
fieldId: 'partnername' | 'location';
}
function getData(): SublistItem | SublistPartners {
return (Math.random() < 0.5)
? { sublistId: 'item', fieldId: 'itemname' }
: { sublistId: 'partners', fieldId: 'partnername' };
}
const someValue = getData();
if (someValue.sublistId === "item") {
// SublistItem in here
}
else {
// SublistPartners in here
}
另一答案
如果您想完全分离出接口,可以执行以下操作:
例如。 sublist.model.ts
interface SublistItem {
sublistId: 'item';
fieldId: 'itemname' | 'quantity';
}
interface SublistPartners {
sublistId: 'partners';
fieldId: 'partnername' | 'location';
}
export type Sublist = SublistItem | SublistPartners;
现在您可以使用子列表类型,它将根据您提供的字段值正确地推断它是SublistPartners类型还是SublistItem类型。
以上是关于Javascript条件内部TypeScript接口的主要内容,如果未能解决你的问题,请参考以下文章
从 JavaScript 到 TypeScript - 接口
JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript之间转换
Deno 内部代码将停用 TypeScript,并公布五项具体理由