我想知道是否有一种内置的方式来递归地定义类型。一个对我来说足够简单的方法是:
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链接到代码