typescript - 映射数组中未对齐的类型
问题描述
以下面的简化代码示例为例(我已经从我的真实用例中简化了它以找到问题的根源):
type TStringWrapper<C extends string> = { wrappedString: C };
type TWrapIfArrayOfStrings<S> = S extends Array<string>
? {
[K in keyof S]: TStringWrapper<S[K]>
}
: never;
我收到以下编译器错误:
Type 'S[K]' does not satisfy the constraint 'string'.
Type 'S[keyof S]' is not assignable to type 'string'.
Type 'S[string] | S[number] | S[symbol]' is not assignable to type 'string'.
Type 'S[string]' is not assignable to type 'string'.
据我所知,这应该编译,因为S[K]
它前面的条件保证是一个字符串。如何重写它以使其工作?
解决方案
试试这个:
type TStringWrapper<C extends string> = { wrappedString: C };
type TWrapIfArrayOfStrings<S> = S extends Array<string>
? {
[K in keyof S & number]: TStringWrapper<S[K]>
}
: never;
你知道S
extends Array<string>
then a key of S
is number
not string
likeS[0], S[1] ...
等等。
这是工作示例。
推荐阅读
- javascript - 如何防止重新选择重新渲染?
- python-3.x - 使用 nltk 和 pos 标记从文本中提取日期,python
- wso2 - WSO2 微积分器仪表板
- javascript - Issue on scrollTop a div to a percentage value
- apache-spark - 数据框架构不同于手动定义的架构(教科书示例)
- python - 我想使用 python 抓取所有标题的 url
- javascript - 如何在 webpack/vue cli 中使用 uglifyjs 缩小和压缩 css/scss?
- vue.js - Nuxt Vuex 突变运行但不更新状态
- postgresql - Drupal 8 和 PostgreSQL:如何在 WHERE 子句中使用表达式的结果?
- mysql - 使用 COALESCE 更新 INNER JOIN 返回的结果与类似的 SELECT 查询不同