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