Usage of ESObject type is restricted
Rule arkts-limited-esobj
Severity: warning
ArkTS does not allow using ESObject type in some cases. The most part of
limitations are put in place in order to prevent spread of dynamic objects in
the static codebase. The only scenario where it is permited to use ESObject
as type specifier is in local variable declaration. Initialization of variables
with ESObject type is also limited. Such variables can only be initialized
with values that originate from interop: other ESObject typed variables,
any, unknown, variables with anonymous type, etc. It is prohibited to
initialize ESObject typed variable with statically typed value. Varaible
of type ESObject can only be passed to interop calls and assigned to other
variables of type ESObject.
ArkTS
// lib.d.ts
declare function foo(): any;
declare function bar(a: any): number;
// main.ets
let e0: ESObject = foo(); // CTE - ``ESObject`` typed variable can only be local
function f() {
let e1 = foo(); // CTE - type of e1 is `any`
let e2: ESObject = 1; // CTE - can't initialize ESObject with not dynamic values
let e3: ESObject = {}; // CTE - can't initialize ESObject with not dynamic values
let e4: ESObject = []; // CTE - can't initialize ESObject with not dynamic values
let e5: ESObject = ""; // CTE - can't initialize ESObject with not dynamic values
e5['prop'] // CTE - can't access dynamic properties of ESObject
e5[1] // CTE - can't access dynamic properties of ESObject
e5.prop // CTE - can't access dynamic properties of ESObject
let e6: ESObject = foo(); // OK - explicitly annotaded as ESObject
let e7 = e6; // OK - initialize ESObject with ESObject
bar(e7) // OK - ESObject is passed to interop call
}
See also
- Recipe 001: Objects with property names that are not identifiers are not supported (
arkts-identifiers-as-prop-names) - Recipe 002:
Symbol()API is not supported (arkts-no-symbol) - Recipe 029: Indexed access is not supported for fields (
arkts-no-props-by-index) - Recipe 060:
typeofoperator is allowed only in expression contexts (arkts-no-type-query) - Recipe 066:
inoperator is not supported (arkts-no-in) - Recipe 137:
globalThisis not supported (arkts-no-globalthis)