Generic indexed access on a substitution type with an array constraint resolves incorrectly
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 38/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- typescript
- 领域
- compilers
调研方向
从链接的 TypeScript Playground 复现开始,将失败的泛型索引访问分支与添加了数组类型别名的可用变体进行比较。阅读 PR 48837 中讨论的行为,然后验证原始示例不再报告约束错误,同时保留预期的推断映射类型行为。
由索引模型根据 Issue 内容生成。
描述
🔎 Search Terms
indexed access substitution type array constraint
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 Code
type LiteralType = string | number | boolean;
type ValueGetter<ValueType extends LiteralType = LiteralType> = () => ValueType;
type Schema = SchemaArray | SchemaObject | LiteralType;
type SchemaArray = Array<SchemaObject | SchemaArray | LiteralType>;
type SchemaObject = {
[key: string]: SchemaObject | SchemaArray | LiteralType;
};
type InferValuesFromSchema<S extends Schema> = S extends LiteralType
? ValueGetter<S>
: S extends SchemaArray
? {
[K in keyof S]: InferValuesFromSchema<S[K]>;
}
: S extends SchemaObject
? {
[K in keyof S]: InferValuesFromSchema<S[K]>;
}
: never;
🙁 Actual behavior
an error is reported:
Type 'S[K]' does not satisfy the constraint 'Schema'.
Type 'S[keyof S]' is not assignable to type 'Schema'.
Type 'S[string] | S[number] | S[symbol]' is not assignable to type 'Schema'.
Type 'S[string]' is not assignable to type 'Schema'.
Type 'S[string]' is not assignable to type 'SchemaObject'.
Type 'S[keyof S]' is not assignable to type 'SchemaObject'.
Type 'S[K]' is not assignable to type 'SchemaObject'.
Type 'S[keyof S]' is not assignable to type 'SchemaObject'.
Type 'S[string] | S[number] | S[symbol]' is not assignable to type 'SchemaObject'.
Type 'S[string]' is not assignable to type 'SchemaObject'.(2344)
🙂 Expected behavior
There should be no error, S[K] should satisfy Schema constraint (at least since https://github.com/microsoft/TypeScript/pull/48837 )
Additional information about the issue
A variant with an additional type alias for that array branch works OK: TS playground.
- 主要语言
- Go
- 星标
- 111k
- 派生
- 14.4k
- 平均合并
- 1 天 19 小时
- 30 天内合并 PR
- 117
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/TypeScript 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 88/100
microsoft/TypeScript#64322 · 2 条评论 · 1 个 reaction · 已指派 2 人 ·
-
Possible Improvement
难度 2/5 1-3 小时 新手友好度 78/100
microsoft/TypeScript#64278 · 1 条评论 · 1 个 reaction ·
-
Docs
难度 2/5 1-3 小时 新手友好度 70/100
microsoft/TypeScript#64118 · 1 条评论 ·
-
难度 1/5 1 小时以内 新手友好度 88/100
microsoft/TypeScript#64094 ·
-
Docs
难度 2/5 1-3 小时 新手友好度 76/100
microsoft/TypeScript#63959 · 5 条评论 ·
查看 microsoft/TypeScript 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 88/100
caddyserver/caddy#8046 ·
-
难度 2/5 1-3 小时 新手友好度 86/100
-
L1 recommended for recruits
难度 2/5 1-3 小时 新手友好度 88/100
-
optimization optimization:agents-md-curator
难度 2/5 1-3 小时 新手友好度 86/100
githubnext/gh-aw-cao#13143 ·
-
难度 2/5 1-3 小时 新手友好度 84/100
blinklabs-io/bursa#904 ·