一、对象的属性名必须是合法的标识符
规则:arkts-identifiers-as-prop-names
级别:错误
在ArkTS中,对象的属性名不能为数字或字符串。例外:ArkTS支持属性名为字符串字面量和枚举中的字符串值。通过属性名访问类的属性,通过数值索引访问数组元素。
TypeScript
var x = { 'name': 'x', 2: '3' };
console.log(x['name']);
console.log(x[2]);
ArkTS
class X {
public name: string = ''
}
let x: X = { name: 'x' };
console.log(x.name);
let y = ['a', 'b', 'c'];
console.log(y[2]);
// 在需要通过非标识符(即不同类型的key)获取数据的场景中,使用Map<Object, some_type>。
let z = new Map<Object, string>();
z.set('name', '1');
z.set(2, '2');
console.log(z.get('name'));
console.log(z.get(2));
enum Test {
A = 'aaa',
B = 'bbb'
}
let obj: Record<string, number> = {
[Test.A]: 1, // 枚举中的字符串值
[Test.B]: 2, // 枚举中的字符串值
['value']: 3 // 字符串字面量
}
相关约束
不支持Symbol() API
不支持通过索引访问字段
不支持delete运算符
仅允许在表达式中使用typeof运算符
不支持in运算符
限制使用标准库
二、不支持Symbol()API
规则:arkts-no-symbol
级别:错误
TypeScript中的Symbol()API用于在运行时生成唯一的属性名称。由于该API的常见使用场景在静态类型语言中没有意义,因此,ArkTS不支持Symbol()API。在ArkTS中,对象布局在编译时就确定了,且不能在运行时被更改。
ArkTS只支持Symbol.iterator。
相关约束
仅支持属性名为标识符的对象
不支持通过索引访问字段
不支持delete运算符
仅允许在表达式中使用typeof运算符
不支持in运算符
限制使用标准库
本文根据HarmonyOS NEXT Developer Beta1官方公开的开发文档整理而成。