假设我有一个对象:
const config = {
initial: 'foo', // must be key of .states
states: {
foo: {},
bar: {}
}
}
如何创建类型定义,以便TypeScript可以断言config.initial
是config.states
的键?例如,
type Config = {
initial?: <key of .states>,
states: {
[K: string]: Config
}
}
function createSomething(config: Config) {
// ...
}
// should NOT compile
createSomething({
initial: 'fake',
states: {
foo: { states: {} },
bar: { states: {} }
}
});
我的想法是我想要一个强类型的配置对象,该对象的属性在createSomething
函数中相互依赖。这可能吗?
答案 0 :(得分:1)
您可以在函数中描述限制
function createSomething<S, K extends keyof S>(c: { initial: K, states: S }): Config
...
// Type '"c"' is not assignable to type '"a" | "b"'.
// (property) initial: "a" | "b"
createSomething({ initial: 'c', states: { a: {}, b: {} } });