递归定义的对象类型映射类型Typescript



我想知道是否有一种内置的方式来递归地定义类型。一个对我来说足够简单的方法是:

interface DeepTypedObject<T> {
[key: string]: T | DeepTypedObject<T>
}
interface StyleSettings extends DeepTypedObject<string> { }
const example: StyleSettings = {
styles: {
primary: 'blue',
secondary: 'red'
}
}

或者更内行:

interface DeepTypedObject<T> {
[key: string]: T | DeepTypedObject<T>
}
const example: DeepTypedObject<string>= {
styles: {
primary: 'blue',
secondary: 'red'
}
}

感觉这是一个非常常见的用例,找不到任何其他方法来实现。

操场上联系

是的,您可以直接将StyleSettings定义为interface,而不参考DeepTypedObject:

interface StyleSettings {
[key: string]: CSSProperties | StyleSettings;
}

你也可以把它写成一个类型别名,如果你愿意的话:

type StyleSettings = {
[key: string]: CSSProperties | StyleSettings
}

Playground链接到代码

相关内容

  • 没有找到相关文章

最新更新