Support for alternative generic inference algorithms
還沒有人認領這個 Issue。
評估
研究方向
首先,將 Python 範例與 issue 中描述的 TypeScript 和 Kotlin 推論行為進行比較。定義應支援哪些替代推論演算法或標註,以及混合引數型別、精確型別和排除的推論應如何運作;完成這項工作需要一個達成共識的設計以及相應的型別規範。
由索引模型根據 Issue 內容生成。
描述
I believe there is a use case for generic inference that doesn't get as wide as possible.
Look at this example of an assertion function, you would never want to do an assertion between two different types, but there is currently no way to type this:
from typing import TypeVar
T = TypeVar("T")
def assert_something(expected: T, actual: T) -> None:
...
assert_something(1, "") # no error, SUS alert!, T is inferred as `object`
Here are some behaviors from other languages
TypeScript
In Typescript generic inference is narrowed to type level types(not down to instance level types) and is never widened:
function assertSomething<T>(expected: T, actual: T): void { ... }
assertSomething(1, "") // Argument of type 'string' is not assignable to parameter of type 'number'.
Kotlin
Kotlin by default acts the same as Python, but there are annotations for changing the behavior of inference.
NoInfer will exclude that usage from inferring the type.
fun <T> assertSomething(expected: T, actual: @NoInfer T) { }
assertSomething(1, "") // Type mismatch: inferred type is String but Int was expected
Exact will require the type of the parameter is equal at a type level (Number != Int)
fun <T> foo(x: @Exact T) { }
foo<Number>(1) // Type mismatch. Required: Number, Found: Int
OnlyInputTypes will require a type annotation if there is any difference in types between the usages of the generic:
fun <@OnlyInputTypes T> doSomething(a: T, b: T) { }
val a = doSomething("a", "b")
val b = doSomething("a", 1) // Type inference failed. The value of the type parameter T should be mentioned in input types (argument types, receiver type or expected type). Try to specify it explicitly.
- 主要語言
- Python
- 星號
- 1.8k
- 分支
- 302
- 平均合併
- 4 小時 38 分鐘
- 30 天內合併 PR
- 6
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
python/typing 的其他 Issue
-
topic: typing spec
難度 2/5 1-3 小時 新手友好度 72/100
-
topic: typing spec
難度 2/5 1-3 小時 新手友好度 75/100
-
Update reference/generics.html with PEP695 type parameter syntax可能已有人在做 @BHUVANSH855 於 181 天前認領。 未關閉topic: documentation
難度 2/5 1-3 小時 新手友好度 76/100
-
topic: documentation
難度 2/5 1-3 小時 新手友好度 65/100
-
Finals and Literals: Spec contradiction可能已有人在做 @srittau 於 34 天前認領。 未關閉topic: conformance tests topic: typing spec
難度 3/5 1-2 天 新手友好度 72/100
相似的 Issue
-
needs triage
難度 2/5 1-3 小時 新手友好度 76/100
維護者通常 1 天內回覆
-
json_params_matcher fails on falsy top-level JSON primitives (0, False, "")可能已有人在做 @mayureshsonawane17 今天認領。 未關閉Waiting for: Product Owner
難度 2/5 1-3 小時 新手友好度 84/100
維護者通常 5 天內回覆
-
難度 2/5 1-3 小時 新手友好度 75/100
維護者通常 1 天內回覆
-
難度 1/5 1 小時以內 新手友好度 88/100
ayghri/i-have-adhd#249 ·
維護者通常 2 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
modelscope/FunASR#3762 ·
維護者通常 1 天內回覆