Рекурсивный тип массива typescript
скажем, у меня есть тип
type Atom = string | boolean | number
. Я хочу определить тип массива, например:
NestedArray = Atom | [a_0, a_1, ... , a_n]
каждая a_i
это Atom
или NestedArray
.
может ли это быть достигнуто в Typescript?
1 ответов
псевдонимы типов не могут ссылаться на себя, поэтому этот наивный подход потерпит неудачу:
type NestedArray = Atom | Array<NestedArray | Atom> //Type alias 'NestedArray' circularly references itself.
интерфейсы могут, однако, ссылаться на себя:
interface NestedArray extends Array<NestedArray | Atom> {
}
и мы можем определить дополнительное объединение на верхнем уровне для обработки корневого случая:
type Atom = string | boolean | number
interface NestedArray extends Array<NestedArray | Atom> {
}
type AtomOrArray = Atom | NestedArray;
//Usage
let foo: AtomOrArray = [
"",
1,
[1, 2, ""]
]
let bar: AtomOrArray = ""