Javascript Interface Conditional Inside TypeScript
Is it possible to have a condition inside an interface declaration in TypeScript. What I'm looking for is a way to say based on the value of the first key, the second value could be those values.
Example (doesn't work):
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';
}
}
+3
source to share
1 answer
No no. It is best to create separate interfaces that describe two different types of data.
For example:
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
}
+5
source to share