Надеюсь, это можно сделать.
Условие простое - у меня 2 типа.
type Numbers: Number[];
type Name: string;
Допустим, они представляют данные, которые я где-то извлек:
// first provider sends it like this
{ "numbers": [2, 3, 4], "name": "Mike" }
// second uses different API keys, even though the data type is the same
{ "numeros": [ 7, 8 ], "nombre": "Jose" }
Я понятия не имею, как создатели API назвали свои свойства, я просто знаю, что возвращаемая полезная нагрузка будет иметь 2 разных свойства - одно с Numbers
, а другое с Name
.
interface INumbers {
[propName: string]: Numbers
}
interface INames {
[propName: string]: Names
}
Я знаю эта подпись индекса используется в случаях, когда имя свойства неизвестно. Он также указывает, что может быть более одного свойства. Я пытаюсь выяснить, возможно ли объединить INumbers
и INames
вместе.
Я пробовал типы объединения, но тогда объект, реализующий этот интерфейс, может иметь только 1 свойство. Другая идея по расширению интерфейсов тоже не сработала.
interface IPayload {
[propName: string]: INumbers | INames
}
// this will use `[propName: string]` from 1st extended interface, ignoring others
interface IPayload extends INumbers, INames {}
Интересно, возможно ли это вообще? Буду признателен за любую помощь.
Спасибо!