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