如何解决将接口限制为联合类型中的特定键
我有一个联合类型列出了一些允许的键:
type AllowedKeys = "a" | "b";
在其他地方,我声明了一个接口,我想将此接口限制为允许的键:
interface Interface {
a: Something; // This is fine
c: SomethingElse; // I want this to throw an error
}
我怎么能写这个来强制接口尊重允许的键?
解决方法
你不能用 interface 做到这一点,因为
这是因为 TypeScript 中的接口是开放式的。这是 TypeScript 的一个重要原则,它允许您使用接口模仿 JavaScript 的可扩展性。
基本上,您总是可以向界面添加新属性。
相反,你可以试试
type AllowedTypes = {
"a" : string;
"b": number ;
}
type AllowedKeys = keyof AllowedTypes;
,
如果你不需要这是一个接口,你可以使用类型,而不是考虑这样做的:
type AllowedKeys = "a" | "b";
export type TestType = {
[key in AllowedKeys]: Something;
};
这会强制你在你的类型使用这两个按键的 - 不知道这是你想要的东西。例如:
这会引发错误:
const a: TestType = {
a: 'asd',b: 'asd',c: 'asd'
}
这是细:
const a: TestType = {
a: 'asd',}
但是,这将引发错误太:
const a: TestType = {
a: 'asd',}
如果你不关心,如果允许所有按键均采用只使用?
在类型声明:
export type TestType = {
[key in AllowedKeys]?: string;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。