Typescript 对象:如何将键限制为特定字符串?

Posted

技术标签:

【中文标题】Typescript 对象:如何将键限制为特定字符串?【英文标题】:Typescript object: How do I restrict the keys to specific strings? 【发布时间】:2018-04-25 09:09:19 【问题描述】:

我想创建一个Partial 类型的对象,其中的键是“a”、“b”或“c”的某种组合。它不会有所有 3 个键(编辑:但它至少有一个)。如何在 Typescript 中执行此操作?以下是更多详细信息:

// I have this:
type Keys = 'a' | 'b' | 'c'

// What i want to compile:
let partial: Partial = 'a': true
let anotherPartial: Partial = 'b': true, 'c': false

// This requires every key:
type Partial = 
  [key in Keys]: boolean;


// This throws Typescript errors, says keys must be strings:
interface Partial = 
  [key: Keys]: boolean;

我在上面尝试过的两种方法(使用映射类型和接口)都没有达到我想要的效果。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

您可以使用? 使键成为可选的,所以

interface Partial 
   a?: boolean;
   b?: boolean;
   c?: boolean;

或者,您可以这样做:

type Keys = "a" | "b" | "c";

type Test = 
    [K in Keys]?: boolean

【讨论】:

谢谢!有没有办法使用Keys 类型以编程方式执行此操作?另外,如果我需要要求至少存在一个键怎么办? 如何限制至少一个键存在? @the_lrner ***.com/a/59213781 应该有帮助

以上是关于Typescript 对象:如何将键限制为特定字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 界面中要求特定的字符串

将键值对(来自数组的值)添加到数组中的特定对象

如何将键值对象插入redis内部的lua表中

如何键入 Typescript 数组以仅接受一组特定的值?

如何将 fetch API 响应转换为 TypeScript 中的特定类型?

如何使用 Angular 2 / Typescript 限制输入字段中的特殊字符