Narrowing types with private functions with `this` return type fails
@weswigham 已经在做这个了。
开始于 2021年7月1日。
评估
这个 Issue 还没有评估数据。
描述
Bug Report
I found that a generic type may be evaluated as incompatible while in fact it should be compatible. In my particular case I have a few generic types / classes that have a type argument constrained to MyClass.
I also have a conditional type with a generic argument that is "less" constrained to a union type of MyClass and a different class that has a generic.
// Conditional type with a generic constrained to either MyClass or something else
type ConditionalType<T extends MyClass | string> =
T extends MyClass ? MyGenericType<T> : T;
In the given constellation I get the following error:
Type 'MyClass & T' does not satisfy the constraint 'MyClass'.
Property 'fn' is missing in type 'MyClass & T' but required in type 'MyClass'.(2344)
I found that these prerequisites have to be met to reproduce the error:
- The class (
MyClass) that we constrain the generics arguments to has a function that returns athistype.
Edit: Or no type annotation, no matter what the inferred type is. Other return type annotations, e.g.: stringwork. - This function is either
protectedorprivate.
🔎 Search Terms
this type, generic, conditional types
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about: seems to me that none apply.
⏯ Playground Link
Playground link with relevant code
💻 Code
// The class to constrain to in the generic types
class MyClass {
constructor(public name: string) {}
protected fn(): this {
return this;
}
}
// A generic type with a type argument constrained to MyClass
type MyGenericType<T extends MyClass> = T;
// Conditional type with a generic constrained to either MyClass or something else
type ConditionalType<T extends MyClass | string> =
T extends MyClass ? MyGenericType<T> : T;
🙁 Actual behavior
Although the condition in the mapped type constrains the given type to extend MyClass it is not compatible as the type here evaluates to MyClass & T.
🙂 Expected behavior
I would expect that the condition in the type narrows the type as given in the condition.
- 主要语言
- 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 ·