如何定义类型
string|string[]|string[][]|string[][][] // ad infinitum
Run Code Online (Sandbox Code Playgroud)
在打字稿中?
编辑:解决方案是:
type Rec = string | string[] | Rec[]
Run Code Online (Sandbox Code Playgroud)
但这是不允许的。
这是我的用例:
interface RecursiveArray<T> {
[index: number]: (RecursiveArray<T> | T);
}
type Recursive<T> = T|RecursiveArray<T>
function stringValue (value: Recursive<string|boolean>): Recursive<string> {
if (typeof value === 'boolean') {
return value ? 'true' : 'false';
}
if (Array.isArray (value)) {
return (value).map (stringValue);
}
return stringValue(value);
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ler 11
与 Rodris 的答案不同,您不需要添加任何内置的数组属性,如地图、长度等。
type RecursiveArray = Array<RecursiveArray | string>;
let arr: RecursiveArray = [];
arr[1] = [];
arr[1][2] = [];
arr[1][2][2] = "item 122";
// In the other answer this throws a type error
arr[1][2][3] = ['1', '2', '3'];
arr[1][2][3].forEach(item => console.log(item));
Run Code Online (Sandbox Code Playgroud)
您可以创建递归接口。
interface RecursiveArray {
[index: number]: (RecursiveArray | string);
length: number;
}
let arr: RecursiveArray = [];
arr[1] = [];
arr[1][2] = [];
arr[1][2][2] = "item 122";
arr[1][2][3] = "item 123";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2273 次 |
| 最近记录: |