HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十二)

鸿蒙时代
发布于 2024-8-7 16:31
浏览
0收藏

一、一元运算符+、-和~仅适用于数值类型
规则:arkts-no-polymorphic-unops
级别:错误
ArkTS仅允许一元运算符用于数值类型,否则会发生编译时错误。与TypeScript不同,ArkTS不支持隐式将字符串转换成数值,必须进行显式转换。
TypeScript

let a = +5;    // 5(number类型)
let b = +'5';    // 5(number类型)
let c = -5;    // -5(number类型)
let d = -'5';    // -5(number类型)
let e = ~5;    // -6(number类型)
let f = ~'5';    // -6(number类型)
let g = +'string'; // NaN(number类型)

function returnTen(): string {
  return '-10';
}

function returnString(): string {
  return 'string';
}

let x = +returnTen();  // -10(number类型)
let y = +returnString(); // NaN

ArkTS

let a = +5;    // 5(number类型)
let b = +'5';    // 编译时错误
let c = -5;    // -5(number类型)
let d = -'5';    // 编译时错误
let e = ~5;    // -6(number类型)
let f = ~'5';    // 编译时错误
let g = +'string'; // 编译时错误

function returnTen(): string {
  return '-10';
}

function returnString(): string {
  return 'string';
}

let x = +returnTen();  // 编译时错误
let y = +returnString(); // 编译时错误

二、不支持delete运算符
规则:arkts-no-delete
级别:错误
ArkTS中,对象布局在编译时就确定了,且不能在运行时被更改。因此,删除属性的操作没有意义。
TypeScript

class Point {
  x?: number = 0.0
  y?: number = 0.0
}

let p = new Point();
delete p.y;

ArkTS

// 可以声明一个可空类型并使用null作为缺省值
class Point {
  x: number | null = 0
  y: number | null = 0
}

let p = new Point();
p.y = null;

相关约束
对象的属性名必须是合法的标识符
不支持Symbol() API
不支持通过索引访问字段
仅允许在表达式中使用typeof运算符
不支持in运算符
三、仅允许在表达式中使用typeof运算符
规则:arkts-no-type-query
级别:错误
ArkTS仅支持在表达式中使用typeof运算符,不允许使用typeof作为类型。
TypeScript

let n1 = 42;
let s1 = 'foo';
console.log(typeof n1); // 'number'
console.log(typeof s1); // 'string'
let n2: typeof n1
let s2: typeof s1

ArkTS

let n1 = 42;
let s1 = 'foo';
console.log(typeof n1); // 'number'
console.log(typeof s1); // 'string'
let n2: number
let s2: string

相关约束
对象的属性名必须是合法的标识符
不支持Symbol() API
不支持通过索引访问字段
不支持delete运算符
不支持in运算符
限制使用标准库

本文根据HarmonyOS NEXT Developer Beta1官方公开的开发文档整理而成。

分类
标签
收藏
回复
举报
回复
    相关推荐