HarmonyOS鸿蒙Next中ArkTS和TypeScript到底是什么关系?能否直接用TS开发鸿蒙应用?

HarmonyOS鸿蒙Next中ArkTS和TypeScript到底是什么关系?能否直接用TS开发鸿蒙应用? 用 TypeScript 做过 Web 和 React Native 项目,现在想转鸿蒙开发。官方推荐 ArkTS,但我看到它语法和 TS 很像。是不是只要会 TS 就能快速上手?ArkTS 增加了哪些鸿蒙特有的能力?

13 回复

ArkTS在保留TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化了静态检查和分析,使得开发者在程序开发阶段能够检测出更多错误,提升程序的稳定性和运行性能。本文将详细解释为什么建议将TS代码适配为ArkTS代码。

程序稳定性

动态类型语言如JavaScript(简称JS)虽能提升开发效率,但也容易在运行时引发非预期错误。例如未检查的undefined值可能导致程序崩溃,这类问题若能在开发阶段发现将显著提升稳定性。TypeScript(TS)通过类型标注机制,使编译器能在编译时检测出多数类型错误,但其非强制类型系统仍存在局限。例如未标注类型的变量会阻碍完整编译检查。ArkTS通过强制静态类型系统克服这一缺陷,实施更严格的类型验证机制,从而最大限度减少运行时错误的发生。

程序性能

为了确保程序的正确性,动态类型语言需要在运行时检查对象的类型。例如JavaScript不允许访问undefined的属性。检查一个值是否为undefined的唯一方法是在运行时进行类型检查。所有JavaScript引擎都会执行以下操作:如果一个值不是undefined,则可以访问其属性;如果尝试访问的值是undefined,则会抛出异常。虽然现代JavaScript引擎可以优化这类操作,但仍然存在一些无法消除的运行时检查,这会导致程序变慢。由于TypeScript代码总是先被编译成JavaScript代码,因此在TypeScript中也会遇到相同的问题。ArkTS解决了这个问题。通过启用静态类型检查,ArkTS代码将被编译成方舟字节码文件,而不是JavaScript代码。因此,ArkTS运行速度更快,更容易被进一步优化。

支持与TS/JS的交互

ArkTS支持与TS/JS的高效互操作。在当前版本中,ArkTS运行时兼容动态类型对象语义。在ArkTS与TypeScript/JavaScript交互操作场景中,直接复用TS/JS的数据和对象作为ArkTS的实体使用时,可能规避ArkTS的静态类型检查机制,进而引发运行时异常或引入额外的性能损耗。

方舟运行时兼容TS/JS

在API version 11上,HarmonyOS SDK中的TypeScript版本为4.9.5,target字段为es2017。应用中支持使用ECMA2017及更高版本的语法进行TS/JS开发。

从TypeScript到ArkTS的适配规则

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/typescript-to-arkts-migration-guide

更多关于HarmonyOS鸿蒙Next中ArkTS和TypeScript到底是什么关系?能否直接用TS开发鸿蒙应用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


顺便说下,1-9楼的部分几个回答有点很AI~

这是官方文档对他俩(ArkTS 和 TypeScript)的详细说明:初识ArkTS语言-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者 (huawei.com) 看完就知道要用哪个了。

先说下结论:用ArkTS。会TS可以快速上手,就是因为ArkTS就是想让会TS的学习更快。

ArkTS 增加很鸿蒙特有的能力,基本都是以kit的形式提供的。cke_8365.png

Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

  1. ArkTS 与 TypeScript 的关系 ArkTS(Ark TypeScript)是华为为鸿蒙生态定制的应用开发语言,它源于 TypeScript,是 TS 的一个超集。 所有合法的 TS 代码在语法层面都可以直接搬到 ArkTS 文件里编译通过(前提是不踩“减法”红线)。 在此之上,ArkTS 做了两类改动: 加法:声明式 UI 语法、状态管理装饰器(@State / @Link / @Prop 等)、跨设备分布式 API、ArkUI 组件化能力。 减法:禁止动态类型、限制 any、不支持 with 语句等容易带来运行时开销或隐患的写法 。
  2. 能不能“直接用 TS”写鸿蒙应用? 纯 TS 代码只能跑在 Node.js、浏览器等标准 JS 运行时;鸿蒙终端上并没有 V8/JSC 这类传统 JS 引擎,而是自带 ArkCompiler + ArkVM。 因此“直接”用 TS 是跑不起来的,必须经由 ArkTS 编译链路: 在 DevEco Studio 里创建 ArkTS 工程 → 用 .ets 后缀 → 代码 部分 写 TS 语法 → 通过 ArkCompiler 编译成方舟字节码或本地机器码 → 打包成鸿蒙 HAP。 结论: 你可以用 TS 的语法思维写业务逻辑; 但文件后缀、编译器、工程配置、UI 描述方式都要切到 ArkTS 范式,否则无法生成鸿蒙可执行包 。 会TS更容易上手ArkTS

个人感觉可以的,有TS的基础很容易上手的,可以了解一下:

ArkTS 与 TypeScript 核心关系

你作为有 TS 开发经验的开发者,核心结论先明确:

  1. ArkTS 是 TS 的超集:完全兼容 TS 核心语法(变量、类型、函数、类等),你的 TS 逻辑代码(工具函数、业务逻辑)可直接复用;
  2. 不能直接用纯 TS 开发鸿蒙:TS 无鸿蒙 UI / 设备交互能力,需用 ArkTS 扩展的语法开发;
  3. 上手极快:仅需学 ArkTS 新增的鸿蒙专属能力,无需重新学基础语法。

一、ArkTS 新增的核心鸿蒙能力(无冗余代码)

能力类型 核心作用(对标你熟悉的 TS/React 场景) 极简示例
声明式 UI 替代 React JSX,快速写鸿蒙界面 @Component struct A { build() { Text("Hello") } }
鸿蒙状态管理 比 React useState 更适配多端 @State count: number = 0(组件内状态)
多端适配 一套代码适配手机 / 平板 / 车机 断点自动识别设备尺寸切换布局
设备能力集成 直接调用鸿蒙通知、相机等 API 一行代码调用鸿蒙通知接口

二、核心总结

  1. TS 基础完全复用,仅需学 ArkTS 的 UI / 鸿蒙设备语法;
  2. 纯 TS 无法开发鸿蒙应用(缺 UI / 设备能力),但逻辑层 TS 代码可 0 修改用;
  3. 你上手核心:复用 TS 逻辑能力,学 ArkTS 极简的 UI 语法(1-2 周即可独立开发)。

1. ArkTS 和 TypeScript 的关系

ArkTS 是 TypeScript 的“严格超集”与“高性能子集”的结合体。

  • 语法保留:ArkTS 保留了 TS 的大部分语法特性(如自定义装饰器),重构后的 ArkTS 代码仍然是合法有效的 TS 代码
  • 规范约束:ArkTS 强制约束了 TS 中那些影响开发正确性增加运行时开销的动态特性(如 any 类型、动态变更对象布局等)。

2. 能否直接用 TS 开发鸿蒙应用?

  • 核心逻辑需用 ArkTS:鸿蒙应用的主体文件为 .ets (ArkTS),这是开发的核心。
  • TS 可作为依赖引用.ets 文件可以 import .ts.js 文件中的源码(作为逻辑库或工具库使用),但反过来 .ts 文件不允许 import .ets 文件源码。
  • 结论:不能完全只用 TS 开发(UI 和入口需要 ArkTS),但现有的 TS 业务逻辑代码可以被复用和引入。

3. 会 TS 能否快速上手?

可以快速上手,但需要适应 “严格的静态类型” 思维。ArkTS 的语法与 TS 高度一致,核心区别在于 ArkTS 禁止了 TS 中灵活但不可控的动态特性

4. ArkTS 带来的变化

ArkTS 并非单纯“增加”功能,而是通过 “限制” 换取了 “高性能”“代码正确性”

A. 核心限制(为了性能与质量)

  1. 强制静态类型
    • 禁止 anyunknown:必须显式标注具体类型。
    • 禁止运行时变更对象布局:不能动态添加/删除属性(如 delete p.xp.z = 'new' 是禁止的)。
    • 禁止 Structural Typing(鸭子类型):即使两个类结构相同,如果没有继承或实现同一接口,也不能互相赋值。
  2. 语法收敛
    • 变量声明:禁止 var,只能用 letconst
    • 函数声明:不支持函数表达式(let f = function(){}),必须用箭头函数(let f = () => {})。
    • 逻辑控制:不支持 for..in(对象布局不可变),改用 for 循环或数组方法。
    • 异常处理throw 只能抛出 Error 及其子类,不能抛出数字或字符串。

B. 特有能力/改进

  1. 编译时优化:通过强制静态类型,编译器能提前验证代码正确性,减少运行时类型检查,显著提升运行性能
  2. 互操作性:提供了与 .ts/.js 文件的导入兼容规则,保证了生态的复用。

总结

如果您熟悉 TypeScript,转向 ArkTS 只需要戒掉“动态类型”的习惯(如随意的 any、动态加属性、对象字面量当类型用)。遵守这些严格规范后,您的代码将获得更高的运行效率和稳定性。

不能!!!!

但是你如果会ts 那对于理解arkts 会更容易一些

arkts 更严格一些  ,不用去看对照表啥的 直接去开发就行, 遇见语法报错就去查, 基本上 写着写着就完全会了

最好使用ArkTS

没啥关系

ArkTS是TypeScript的扩展,专为鸿蒙应用开发设计。它基于TS语法,增加了声明式UI和状态管理等能力。不能直接用TS开发鸿蒙应用,必须使用ArkTS。

ArkTS是HarmonyOS Next应用开发的核心语言,它在TypeScript(TS)的基础上进行了关键增强和约束,两者关系可以概括为“超集+运行时特化”。

核心关系:

  1. 语法超集:ArkTS兼容TS的绝大部分语法、类型系统和ES规范,因此你现有的TS技能可以无缝迁移,能快速上手。
  2. 运行时特化:ArkTS并非直接运行TS。它通过ArkTS编译器将代码转换为方舟字节码,在HarmonyOS的ArkTS运行时(而非Node.js或浏览器环境)上执行。这意味着你不能直接使用TS开发,必须使用ArkTS语法并遵循其规范。

ArkTS的关键增强与约束:

  • UI描述能力:ArkTS扩展了声明式UI语法,这是与TS最大的区别。它提供了内置的UI组件(如TextButtonColumn)和装饰器(如@Entry@Component),用于构建原生鸿蒙界面。这是React Native的JSX或Vue模板的替代方案,但语法更贴近鸿蒙原生开发。
  • 状态管理:ArkTS内置了响应式状态管理机制(如@State@Prop@Link装饰器),用于驱动UI更新。这与TS中需要依赖外部状态库(如Redux、MobX)不同,是框架层集成的能力。
  • 静态类型强化:ArkTS对动态类型施加了更严格的约束(例如限制any类型的使用,要求显式类型声明),以提升运行时性能和应用稳定性。
  • 鸿蒙能力集成:ArkTS直接支持调用HarmonyOS的API(如@ohos开头的模块),访问端侧AI、分布式硬件等能力,这些是TS生态不具备的。
  • 包管理:鸿蒙应用使用ohpm包管理器,依赖的也是专为ArkTS/HarmonyOS封装的库,而非npm生态的通用TS库。

总结: 如果你熟悉TS,学习ArkTS的曲线会非常平缓,核心差异在于UI构建和状态管理范式。但你无法直接用现有TS代码或Web/React Native的TS库开发鸿蒙应用,必须基于ArkTS的语法和鸿蒙API重新实现。建议通过官方ArkTS文档和示例,重点掌握其声明式UI和状态管理部分。

回到顶部