微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将接口限制为联合类型中的特定键

如何解决将接口限制为联合类型中的特定键

我有一个联合类型列出了一些允许的键: 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 举报,一经查实,本站将立刻删除。