13af6ab5fSopenharmony_ci#  Declaring properties on functions is not supported
23af6ab5fSopenharmony_ci
33af6ab5fSopenharmony_ciRule ``arkts-no-func-props``
43af6ab5fSopenharmony_ci
53af6ab5fSopenharmony_ci**Severity: error**
63af6ab5fSopenharmony_ci
73af6ab5fSopenharmony_ciArkTS does not support declaring properties on functions because there is no
83af6ab5fSopenharmony_cisupport for objects with dynamically changing layout. Function objects follow
93af6ab5fSopenharmony_cithis rule and their layout cannot be changed in runtime.
103af6ab5fSopenharmony_ci
113af6ab5fSopenharmony_ci
123af6ab5fSopenharmony_ci## TypeScript
133af6ab5fSopenharmony_ci
143af6ab5fSopenharmony_ci
153af6ab5fSopenharmony_ci```
163af6ab5fSopenharmony_ci
173af6ab5fSopenharmony_ci    class MyImage {
183af6ab5fSopenharmony_ci        // ...
193af6ab5fSopenharmony_ci    }
203af6ab5fSopenharmony_ci
213af6ab5fSopenharmony_ci    function readImage(
223af6ab5fSopenharmony_ci        path: string, callback: (err: any, image: MyImage) => void
233af6ab5fSopenharmony_ci    )
243af6ab5fSopenharmony_ci    {
253af6ab5fSopenharmony_ci        // ...
263af6ab5fSopenharmony_ci    }
273af6ab5fSopenharmony_ci
283af6ab5fSopenharmony_ci    function readFileSync(path : string) : number[] {
293af6ab5fSopenharmony_ci        return []
303af6ab5fSopenharmony_ci    }
313af6ab5fSopenharmony_ci
323af6ab5fSopenharmony_ci    function decodeImageSync(contents : number[]) {
333af6ab5fSopenharmony_ci        // ...
343af6ab5fSopenharmony_ci    }
353af6ab5fSopenharmony_ci
363af6ab5fSopenharmony_ci    readImage.sync = (path: string) => {
373af6ab5fSopenharmony_ci        const contents = readFileSync(path)
383af6ab5fSopenharmony_ci        return decodeImageSync(contents)
393af6ab5fSopenharmony_ci    }
403af6ab5fSopenharmony_ci
413af6ab5fSopenharmony_ci```
423af6ab5fSopenharmony_ci
433af6ab5fSopenharmony_ci## ArkTS
443af6ab5fSopenharmony_ci
453af6ab5fSopenharmony_ci
463af6ab5fSopenharmony_ci```
473af6ab5fSopenharmony_ci
483af6ab5fSopenharmony_ci    class MyImage {
493af6ab5fSopenharmony_ci        // ...
503af6ab5fSopenharmony_ci    }
513af6ab5fSopenharmony_ci
523af6ab5fSopenharmony_ci    async function readImage(
533af6ab5fSopenharmony_ci        path: string, callback: (err: Error, image: MyImage) => void
543af6ab5fSopenharmony_ci    ) : Promise<MyImage>
553af6ab5fSopenharmony_ci    {
563af6ab5fSopenharmony_ci        // In real world, the implementation is more complex,
573af6ab5fSopenharmony_ci        // involving real network / DB logic, etc.
583af6ab5fSopenharmony_ci        return await new MyImage()
593af6ab5fSopenharmony_ci    }
603af6ab5fSopenharmony_ci
613af6ab5fSopenharmony_ci    function readImageSync(path: string) : MyImage {
623af6ab5fSopenharmony_ci        return new MyImage()
633af6ab5fSopenharmony_ci    }
643af6ab5fSopenharmony_ci
653af6ab5fSopenharmony_ci```
663af6ab5fSopenharmony_ci
673af6ab5fSopenharmony_ci## See also
683af6ab5fSopenharmony_ci
693af6ab5fSopenharmony_ci- Recipe 137:  ``globalThis`` is not supported (``arkts-no-globalthis``)
703af6ab5fSopenharmony_ci
713af6ab5fSopenharmony_ci
72