13af6ab5fSopenharmony_ci# Function return type inference is limited 23af6ab5fSopenharmony_ci 33af6ab5fSopenharmony_ciRule ``arkts-no-implicit-return-types`` 43af6ab5fSopenharmony_ci 53af6ab5fSopenharmony_ci**Severity: error** 63af6ab5fSopenharmony_ci 73af6ab5fSopenharmony_ciArkTS supports type inference for function return types, but this functionality 83af6ab5fSopenharmony_ciis currently restricted. In particular, when the expression in the ``return`` 93af6ab5fSopenharmony_cistatement is a call to a function or method whose return value type is omitted, 103af6ab5fSopenharmony_cia compile-time error occurs. In case of any such error, specify the return type 113af6ab5fSopenharmony_ciexplicitly. 123af6ab5fSopenharmony_ci 133af6ab5fSopenharmony_ci 143af6ab5fSopenharmony_ci## TypeScript 153af6ab5fSopenharmony_ci 163af6ab5fSopenharmony_ci 173af6ab5fSopenharmony_ci``` 183af6ab5fSopenharmony_ci 193af6ab5fSopenharmony_ci // Compile-time error with noImplicitAny 203af6ab5fSopenharmony_ci function f(x: number) { 213af6ab5fSopenharmony_ci if (x <= 0) { 223af6ab5fSopenharmony_ci return x 233af6ab5fSopenharmony_ci } 243af6ab5fSopenharmony_ci return g(x) 253af6ab5fSopenharmony_ci } 263af6ab5fSopenharmony_ci 273af6ab5fSopenharmony_ci // Compile-time error with noImplicitAny 283af6ab5fSopenharmony_ci function g(x: number) { 293af6ab5fSopenharmony_ci return f(x - 1) 303af6ab5fSopenharmony_ci } 313af6ab5fSopenharmony_ci 323af6ab5fSopenharmony_ci function doOperation(x: number, y: number) { 333af6ab5fSopenharmony_ci return x + y 343af6ab5fSopenharmony_ci } 353af6ab5fSopenharmony_ci 363af6ab5fSopenharmony_ci console.log(f(10)) 373af6ab5fSopenharmony_ci console.log(doOperation(2, 3)) 383af6ab5fSopenharmony_ci 393af6ab5fSopenharmony_ci``` 403af6ab5fSopenharmony_ci 413af6ab5fSopenharmony_ci## ArkTS 423af6ab5fSopenharmony_ci 433af6ab5fSopenharmony_ci 443af6ab5fSopenharmony_ci``` 453af6ab5fSopenharmony_ci 463af6ab5fSopenharmony_ci // Explicit return type is required: 473af6ab5fSopenharmony_ci function f(x: number) : number { 483af6ab5fSopenharmony_ci if (x <= 0) { 493af6ab5fSopenharmony_ci return x 503af6ab5fSopenharmony_ci } 513af6ab5fSopenharmony_ci return g(x) 523af6ab5fSopenharmony_ci } 533af6ab5fSopenharmony_ci 543af6ab5fSopenharmony_ci // Return type may be omitted, it is inferred from f's explicit type: 553af6ab5fSopenharmony_ci function g(x: number) { 563af6ab5fSopenharmony_ci return f(x - 1) 573af6ab5fSopenharmony_ci } 583af6ab5fSopenharmony_ci 593af6ab5fSopenharmony_ci // In this case, return type will be inferred 603af6ab5fSopenharmony_ci function doOperation(x: number, y: number) { 613af6ab5fSopenharmony_ci return x + y 623af6ab5fSopenharmony_ci } 633af6ab5fSopenharmony_ci 643af6ab5fSopenharmony_ci console.log(f(10)) 653af6ab5fSopenharmony_ci console.log(doOperation(2, 3)) 663af6ab5fSopenharmony_ci 673af6ab5fSopenharmony_ci``` 683af6ab5fSopenharmony_ci 693af6ab5fSopenharmony_ci 70