当前位置: 首页 > 知识库问答 >
问题:

前端 - `[K in ts.SymbolFlags]?` 这里的`?` 是什么意思呢?

伊俊能
2024-08-29

这是我看到的代码:

const symbolConverters: {
  [K in ts.SymbolFlags]?: string 
} = {
  [ts.SymbolFlags.RegularEnum]: 'convertEnum',
}

请问一下:
1、[K in ts.SymbolFlags]? 这里的? 是什么意思呢?
2、[K in ts.SymbolFlags] 这里使用 [] 扩住的意思是什么呢?

共有1个答案

令狐和裕
2024-08-29

1、[K in ts.SymbolFlags]? 这里的? 是什么意思呢?
这里的?是可选属性的意思,也就是说在这个对象里面不是所有的ts.SymbolFlags都需要有一个对应的值。如果某个ts.SymbolFlags枚举成员没有在对象中定义,则该枚举成员在这个对象中就没有对应的属性。
2、[K in ts.SymbolFlags] 这里使用 [] 扩住的意思是什么呢?
意思是要进行类型的映射。举例来说,现在有一个类型A和另一个类型B:

type A = {
  foo: number;
  bar: number;
};

type B = {
  foo: string;
  bar: string;
};

这两个类型的属性结构是一样的,但是属性的类型不一样。如果属性数量多的话,逐个写起来就很麻烦,那么可以这么写:

type A = {
  foo: number;
  bar: number;
};

type B = {
  [prop in keyof A]: string;
};

类型B采用了属性名索引的写法,[prop in keyof A]表示依次得到类型A的所有属性名,然后将每个属性的类型改成 string,那么[K in ts.SymbolFlags]?: string的意思就是依次得到ts.SymbolFlags枚举成员的属性名,然后每个属性的类型改成 string,由于是可选属性,所以不一定每个枚举成员都会有属性映射。
参考来源:阮一峰老师的ts教程

 类似资料:
  • 举例来说,react或vue项目里。CSS用到url的时候,~和@是什么用法。在哪里配置的,MDN里好像也没写这个。求一个完整的步骤

  • 问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的

  • 问题内容: 这个头衔看起来并不那么疯狂。我承诺!! 在研究另一个问题时,我在Stack Overflow的样式表中注意到以下内容: 这是一种奇怪的条件样式吗?这是一个错误吗?假设这不是一个错误,那么它适用于所有IE版本吗?有没有一种方法可以指定给定规则仅适用于大于(例如7)的IE版本? 我以前从未遇到过-我一直在使用条件注释来表示IE特定的样式(以及其价值,我宁愿将所有IE特定样式完全分开)。 问

  • 在VSCode中,我把鼠标移动在:GenerateStyle,会显示出如截图的提示,请问下: 1、(alias)是什么意思呢? 2、是对GenerateStyle做了什么吗,才会显示出这个alias? 3、我们看到还有:import GenerateStyle,请问这个在这里有什么用,原因是什么呢?

  • 所以我有这行代码。它给了我输出[6,28]。你们知道为什么吗?我不知道有人想打印什么样的数字。

  • 我运行了几个测试场景,其中我从SOAP客户端调用远程系统的SOA服务,并遇到了各种远程异常。你能帮我确定每个错误意味着什么吗- 1) java.net网站。ConnectException:连接被拒绝“ 2)Java . net . socket time out异常:连接超时" 3) 连接异常: 连接超时”

  • 问题内容: 此日期时间模式的含义是什么? 问题答案: 它仅显示标准ISO 8601日期时间字符串中“ 时间” 组件的开始。维基百科上有关于此标准格式的详细页面。

  • 在 jmh 结果中,分数以 ns/op 为单位,即每次操作所花费的时间(以纳秒为单位),操作是否是指基准测试调用?如果是这种情况,较低的分数将意味着更快的呼叫?