首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将接口限制为来自联合类型的特定键

问将接口限制为来自联合类型的特定键
EN

Stack Overflow用户
提问于 2021-01-07 12:16:49
回答 2查看 202关注 0票数 1

我有一个联合类型,列出了一些允许的密钥:type AllowedKeys = "a" | "b";

在其他地方,我声明了一个接口,并且希望将这个接口限制在允许的键上:

代码语言:javascript
复制
interface Interface {
  a: Something; // This is fine
  c: SomethingElse; // I want this to throw an error
}

我怎么写这个来强制接口尊重允许的键呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-07 12:53:22

你不能用接口做这件事,因为

这是因为TypeScript中的接口是开放的。这是TypeScript的一个重要原则,它允许您使用接口来模拟JavaScript的可扩展性。

基本上,您可以始终向接口添加新属性。

相反,你可以试试

代码语言:javascript
复制
type AllowedTypes =  {
    "a" : string;
    "b": number ;
}

type AllowedKeys = keyof AllowedTypes;
票数 0
EN

Stack Overflow用户

发布于 2021-01-07 13:27:56

如果您不需要将它作为一个接口,并且可以使用type,那么可以考虑这样做:

代码语言:javascript
复制
type AllowedKeys = "a" | "b";

export type TestType = {
    [key in AllowedKeys]: Something;
};

它将强制您在您的类型中使用这两个键-不确定这是否是您想要的东西。例如:

这将引发一个错误:

代码语言:javascript
复制
const a: TestType = {
    a: 'asd',
    b: 'asd',
    c: 'asd'
}

这很好:

代码语言:javascript
复制
const a: TestType = {
    a: 'asd',
    b: 'asd',
}

但这也会引发一个错误:

代码语言:javascript
复制
const a: TestType = {
    a: 'asd',
}

如果您不关心是否使用了所有允许的键,只需在类型声明中使用?:

代码语言:javascript
复制
export type TestType = {
    [key in AllowedKeys]?: string;
};
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65612236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档