TypeScript:一个依赖于另一个的接口属性



是否可以键入依赖于另一个的接口属性?

例如,我有:

const object = {
foo: 'hello',
bar: { hello: '123', },
}

我想确保bar的键必须是foo的值。

interface ObjectType = {
foo: string;
bar: { hello: string; } // instead of hardcoding have something like this? --> payload: { ValueOfFoo: string; }
}

谢谢!:(

您需要一个泛型来捕获特定字符串的类型

interface ObjectType<K extends string> {
foo: K;
bar: { [P in K]: string };
}

然后你可以写

const object: ObjectType<'hello'> = {
foo: 'hello',
bar: { hello: '123', },
};

或者,如果你有一个接受这样一个对象的函数,你可以使用该接口用全类型推理来强制执行规则

function useObject<K extends string>(o: ObjectType<K>) { }
useObject({
foo: 'hello', 
bar: { hello: '113' } // works
});
useObject({
foo: 'hello', 
bar: { world: '113' }
//         ^^^^^−−−−−−−−−−−− error, `world` should be `hello`
});

游乐场链接

相关内容

  • 没有找到相关文章

最新更新