13af6ab5fSopenharmony_ci#  Type inference in case of generic function calls is limited
23af6ab5fSopenharmony_ci
33af6ab5fSopenharmony_ciRule ``arkts-no-inferred-generic-params``
43af6ab5fSopenharmony_ci
53af6ab5fSopenharmony_ci**Severity: error**
63af6ab5fSopenharmony_ci
73af6ab5fSopenharmony_ciArkTS allows to omit generic type parameters if it is possible to infer
83af6ab5fSopenharmony_cithe concrete types from the parameters passed to the function. A compile-time
93af6ab5fSopenharmony_cierror occurs otherwise. In particular, inference of generic type parameters
103af6ab5fSopenharmony_cibased only on function return types is prohibited.
113af6ab5fSopenharmony_ci
123af6ab5fSopenharmony_ci
133af6ab5fSopenharmony_ci## TypeScript
143af6ab5fSopenharmony_ci
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ci```
173af6ab5fSopenharmony_ci
183af6ab5fSopenharmony_ci    function choose<T>(x: T, y: T): T {
193af6ab5fSopenharmony_ci        return Math.random() < 0.5 ? x : y
203af6ab5fSopenharmony_ci    }
213af6ab5fSopenharmony_ci
223af6ab5fSopenharmony_ci    let x = choose(10, 20)   // OK, choose<number>(...) is inferred
233af6ab5fSopenharmony_ci    let y = choose("10", 20) // Compile-time error
243af6ab5fSopenharmony_ci
253af6ab5fSopenharmony_ci    function greet<T>(): T {
263af6ab5fSopenharmony_ci        return "Hello" as T
273af6ab5fSopenharmony_ci    }
283af6ab5fSopenharmony_ci    let z = greet() // Type of T is inferred as "unknown"
293af6ab5fSopenharmony_ci
303af6ab5fSopenharmony_ci```
313af6ab5fSopenharmony_ci
323af6ab5fSopenharmony_ci## ArkTS
333af6ab5fSopenharmony_ci
343af6ab5fSopenharmony_ci
353af6ab5fSopenharmony_ci```
363af6ab5fSopenharmony_ci
373af6ab5fSopenharmony_ci    function choose<T>(x: T, y: T): T {
383af6ab5fSopenharmony_ci        return Math.random() < 0.5 ? x : y
393af6ab5fSopenharmony_ci    }
403af6ab5fSopenharmony_ci
413af6ab5fSopenharmony_ci    let x = choose(10, 20)   // OK, choose<number>(...) is inferred
423af6ab5fSopenharmony_ci    let y = choose("10", 20) // Compile-time error
433af6ab5fSopenharmony_ci
443af6ab5fSopenharmony_ci    function greet<T>(): T {
453af6ab5fSopenharmony_ci        return "Hello" as T
463af6ab5fSopenharmony_ci    }
473af6ab5fSopenharmony_ci    let z = greet<string>()
483af6ab5fSopenharmony_ci
493af6ab5fSopenharmony_ci```
503af6ab5fSopenharmony_ci
513af6ab5fSopenharmony_ci
52