microsoft / microsoft/TypeScript
Allow inferring return type within a type guard in conditional types
未关闭
还没有人认领这个 Issue。
Bug
Domain: Conditional Types
- 主要语言
- Go
- 星标
- 111k
- 派生
- 14.4k
- 平均合并
- 1 天 19 小时
- 30 天内合并 PR
- 117
描述
Bug Report
🔎 Search Terms
typeguard conditional infer
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about (bug reporting)
⏯ Playground Link
Playground link with relevant code
💻 Code
This is simplified pretty heavily:
type InferredTypeGuard<TypeGuard> =
TypeGuard extends ((node: infer Input) => node is infer Output)
? (node: Input) => node is Output
: never;
🙁 Actual behavior
Error on infer Output:
A type predicate's type must be assignable to its parameter's type.
Type 'Output' is not assignable to type 'Input'.
'Input' could be instantiated with an arbitrary type which could be unrelated to 'Output'.(2677)
🙂 Expected behavior
TypeScript should allow a conditional type to infer the Output type within the type guard function's return type.
There's no other syntax I can find to do so, and I would have thought this would be the cleanest syntax. Not sure if bug report or feature request...
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从链接的 TypeScript Playground 示例和使用 infer Input 与 infer Output 的简化条件类型开始。跟踪报告错误 2677 的类型谓词可赋值性检查,并确定条件类型推断应如何与其交互。当示例能够使用预期推断出的输入类型和输出类型通过类型检查,并且为该行为提供回归覆盖时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- typescript
- 领域
- compilers
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 25/100