typescript - 类型语法 - Typescript 中这种语法的含义是什么
问题描述
我是打字稿的新手;我不明白这种语法的含义;有人可以向我解释吗?
type Type1<K> = K extends string ? { [P in K]: string } : never;
如果类型 K 扩展字符串,那么 Type1 将是一个字符串数组的文档?就像是:
{"x": ["a", "b", "c"],
"z": ["d", "e", "f"]
//etc
}
Or
{"x": "a",
"z": "b"
//etc
}
解决方案
让我们先看看{ [P in K]: string }
这是一个映射类型。如果K
是字符串文字类型的联合(例如:)'a' | 'b'
,则此类型的结果将是一个对象类型,其中这些名称作为键和string
类型(so { a: string, b: string }
)。这实际上等价于预定义Record
类型。
是分布式条件K extends string ? ... : never
类型。这意味着如果是联合类型,则联合的每个成员都将被获取并通过映射类型。例如:K
type ex = Type1<'a' | 'b'> =>
('a' extends string ? { [P in 'a']: string } : never) | ('b' extends string ? { [P in 'b']: string } : never) =>
({ [P in 'a']: string }) | ({ [P in 'b']: string }) =>
{ a: string } | { b: string }
推荐阅读
- ios - (iOS) AWS S3 上传失败且没有错误(使用联合身份验证的用户 - Apple SSO)
- php - 第一个用户输入被mysql忽略
- flutter - 不管我做什么,这个错误预计会找到')'不会消失
- python - 无法使用 pip3 安装 Pandas 库
- css - 在网格模板列中优先考虑第二个值
- javascript - 如何在 foreach 内部的钩子中更新数组状态
- javascript - 如何在js中编写html
- yii - yii2-multiple-input - 在中间添加和删除行
- loops - 用地图功能替换_na
- spring-boot - 如何使用 Spring 集成处理大文件