Я только начинаю открывать для себя TypeScript и проверяю пределы. Я ищу способ сделать интерфейс в виде полей в зависимости от значения одного из его свойств.
Например:
type type RecursiveArray<T> = T | RecursiveArray<T>[];
type allowedTypesString = 'string' | 'email' | 'date' | 'id' | 'number' | 'boolean' | 'object';
interface IOptions {
type: RecursiveArray<allowedTypesString>,
required?: boolean,
defaultValue?: PROVIDED_TYPE,
expected?: PROVIDED_TYPE[],
transform?: (value: PROVIDED_TYPE) => any,
validate?: (value: PROVIDED_TYPE) => boolean,
regexp?: RegExp,
min?: number,
max?: number,
params?: object,
}
Я хочу, чтобы в IOptions были:
regex
, только еслиtype
- это «строка» или «электронная почта».params
только еслиtype
- «объект».min
иmax
, только еслиtype
- "число и т. Д. ...
Я увидел, что могу использовать различаемые союзы, например, в этот поток, но, как видите, свойство type
- это RecursiveArray<allowedTypesString>
, что означает, что это может быть одна строка, массив строк strong >, массив строковых массивов, и т. д. ...
Что касается профсоюзов, я мог бы заявить:
interface IOptionsString {
type: string,
defaultValue?: string,
expected?: string[],
regexp?: RegExp,
}
который будет вызываться, если type
является строкой. Но что, если я получаю массив строк или массив строк?
Возможно ли то, что я делаю? В противном случае я буду обрабатывать только один массив, но я хочу знать, возможно ли то, о чем я думаю, в TypeScript.
Спасибо за вашу помощь !