HarmonyOS鸿蒙Next中ARKTS与TypeScript的区别

HarmonyOS鸿蒙Next中ARKTS与TypeScript的区别

TypeScript是这样的:

会报错:Indexed access types are not supported (arkts-no-aliases-by-index) <ArkTSCheck>

于是去询问codegenie,得到的是这样的解释:

显然,没有体现出index怎么使用的。而且这三个语句放在编译器里也是报错的。

请问,既然出了ArkTSCheck,能不能顺便告诉我怎么修改?


更多关于HarmonyOS鸿蒙Next中ARKTS与TypeScript的区别的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

当使用动态索引访问类型时,例如:

type Person = { 
  name: string; 
  age: number 
};
type KeyType = keyof Person;
// 触发arkts-no-aliases-by-index错误
type ValueType = Person[KeyType]; 

这种基于动态索引的类型推导在ArkTS中不允许,因其可能引入运行时类型不确定性。

要改为显式类型定义

// 显式声明联合类型替代动态索引
type ValueType = string | number;

更多关于HarmonyOS鸿蒙Next中ARKTS与TypeScript的区别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


arkts是 typescript的超集,在编写代码的时候,语法需要进行适配,可以参考一下文档进行语法适配

从TypeScript到ArkTS的适配指导-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者

类型检查都告诉你不支持这种语法了,arkts不支持索引访问类型

你写TS遇到语法不支持会咋办?换支持的写法啊,还能怎么告诉你?

直接改成type Age = number不就好了,效果不是一样的吗

ARKTS是鸿蒙Next专有的应用开发语言,基于TypeScript扩展。主要区别:

  1. 运行时环境:ARKTS运行在鸿蒙的方舟编译器上,TypeScript需要转译成JavaScript运行在浏览器或Node.js
  2. API支持:ARKTS内置鸿蒙设备能力接口(如分布式任务调度),TypeScript依赖第三方库
  3. 组件系统:ARKTS集成鸿蒙UI组件(如@Component装饰器),TypeScript通常搭配React/Vue等框架
  4. 类型系统:ARKTS强化了鸿蒙特有类型(如Ability生命周期类型)

ARKTS在HarmonyOS Next中对TypeScript进行了定制化改造,主要区别在于类型系统的限制。针对索引访问类型(indexed access)报错的问题,解决方案如下:

  1. ARKTS禁止通过索引直接访问类型别名,这是出于运行时类型安全的考虑。您需要改用更明确的类型声明方式。

  2. 对于示例中的类型访问问题,建议改用接口或类型映射来替代索引访问:

// 替代方案1:使用明确接口
interface Person {
  name: string;
  age: number;
}
type NameType = Person['name']; // 改为
type NameType = string; // 直接声明类型

// 替代方案2:使用类型映射
type PersonProperties = {
  name: string;
  age: number;
}
type NameType = PersonProperties['name']; // 改为
type NameType = string;
  1. 如果必须保留动态类型访问,可以使用联合类型:
type PersonKeys = 'name' | 'age';
type PersonType<T extends PersonKeys> = T extends 'name' ? string : number;

ARKTS的这些限制是为了确保在鸿蒙运行时环境下的类型安全性和性能优化。开发时建议尽量使用显式类型声明而非动态类型访问。

回到顶部