使用类型中的“in”键入具有计算属性的类型

Posted

技术标签:

【中文标题】使用类型中的“in”键入具有计算属性的类型【英文标题】:Type with computed property using 'in' from type 【发布时间】:2018-10-10 05:24:21 【问题描述】:

我使用 typeofkeyof 从对象 Options 生成类型 Option

我定义了另一种类型 - Dropdown,它具有计算属性并使用 Option 使用 in

我得到一个错误:

类型 ' [Options.option1]: string; 中缺少属性 'options2' '。

我应该如何正确实施?

const Options = 
  option1: 'option1' as 'options1',
  option2: 'option1' as 'options2',
  option3: 'option1' as 'options3',


type Option = typeof Options[keyof typeof Options];
type Dropdown =  [key in Option]: string ;

const obj: Dropdown = 
  [Options.option1]: 'test'

playground

【问题讨论】:

目标是Dropdown 中的属性是可选的?因为如果是这样,您只是缺少? [key in Option]?: string 好吧,真丢脸 :) 你是对的。谢谢!如果您愿意,请将其发布为答案,以便可能对其他笨拙的人有所帮助.. 【参考方案1】:

感谢@TitianCernicova-Dragomir,我只需要设置可选的属性 (?),如下所示:

const Options = 
  option1: 'option1' as 'options1',
  option2: 'option1' as 'options2',
  option3: 'option1' as 'options3',


type Option = typeof Options[keyof typeof Options];
type Dropdown =  [key in Option]?: string ;

const obj: Dropdown = 
  [Options.option1]: 'test'

Playground

【讨论】:

以上是关于使用类型中的“in”键入具有计算属性的类型的主要内容,如果未能解决你的问题,请参考以下文章

Dictionary 类型的计算属性的设置器

具有 UNNotificationRequest 的计算属性返回无法将类型“Void”的返回表达式转换为返回类型“[UNNotificationRequest]”

“计算属性必须具有显式类型”错误:如何在 Swift 2.x 中列出文件? [复制]

是否可以在 Swift 中创建具有 Self 或关联类型要求的通用计算属性,如果可以,如何?

计算属性:get 和 set 之间的不同类型

在 TypeScript 中键入匿名对象的属性