一、区别
在鸿蒙操作系统(HarmonyOS)的开发中,ETS(Enhanced TypeScript)和TS(TypeScript)文件都用于编写应用程序逻辑,但它们有一些关键的区别,特别是在语法特性和对鸿蒙特定功能的支持上。
ETS (Enhanced TypeScript)
增强特性:
ETS是为鸿蒙应用开发而设计的一种TypeScript扩展。它包含了一些专有的语法糖和API,以更好地支持鸿蒙的声明式UI框架ArkUI。
ETS提供了更简洁、直观的语法来定义UI组件及其状态,这些特性可能包括自定义属性、生命周期方法等,都是为了简化开发者的工作流程。
UI框架集成:
ETS紧密集成了ArkUI,允许开发者使用声明式的编程风格来构建用户界面。这通常意味着ETS文件会包含大量的UI描述代码。
ArkUI提供了一系列的UI组件和布局容器,可以直接在ETS文件中使用,并且有专门的语法来定义组件的状态和行为。
编译器支持:
ETS文件由鸿蒙提供的工具链处理,比如DevEco Studio,它可以将ETS代码编译成可以在鸿蒙设备上运行的二进制代码。
编译过程中,ETS的一些增强特性会被转换为标准的JavaScript或其他中间格式,以便于执行。
示例:
// MyComponent.ets
@Entry
@Component
struct MyComponent {
build() {
Column() {
Text('Hello, HarmonyOS!')
.fontSize(50)
}
.width('100%')
}
}
TS (TypeScript)
通用性:
TS文件就是普通的TypeScript文件,它遵循标准的TypeScript语法,不包含鸿蒙特有的扩展。
这些文件可以用于实现业务逻辑、数据处理等功能,而不局限于UI相关的代码。
兼容性:
TS文件可以在任何支持TypeScript的环境中使用,不仅仅是鸿蒙应用。
它们可以与现有的TypeScript库和工具链无缝集成。
编译器支持:
TS文件可以使用标准的TypeScript编译器tsc或通过其他构建工具(如Webpack、Rollup等)进行编译。
在鸿蒙项目中,TS文件最终也会被编译成JavaScript,以便在鸿蒙设备上执行。
示例:
/ utils.ts
export function formatMessage(message: string): string {
return `Formatted: ${message}`;
}
互相调用
ArkTS基于兼容了TS语法,继承了TS的所有特性,当前,ArkTS在TS的基础上主要扩展了声明式UI能力,让开发者能够以更简洁、更自然的方式开发高性能应用。推荐用ArKTS开发UI相关内容,TS可以用来开发业务逻辑相关内容。
ts文件不支持调用ets文件中定义的方法。
ets调用ts文件中定义的方法,可以使用ES6中import引入及export导出的语法,将ts文件中的方法进行export导出,在ets文件中import引入该方法进行调用
可以参考如下示例:
/ 声明并导出方法test,以便外部文件引入调用
export default function test() {
// to do something
}
// 引入ts文件中定义的方法
import test from './xxx';
@Entry
@Component
struct eventTestExample {
build() {
Button('test')
.onClick(() => {
test(); // 调用ts文件中定义的方法
})
}
}
总结
ETS 是专门为鸿蒙应用开发设计的,包含了对ArkUI和其他鸿蒙特性的直接支持,适用于构建UI和交互逻辑。
TS 则是标准的TypeScript,适用于编写跨平台的逻辑代码,也可以在鸿蒙应用中使用,但不具备ETS的特殊语法和功能。
ArkTS是HarmonyOS生态的应用开发语言,推荐使用.ets和.d.ets文件进行开发。HarmonyOS也提供标准的TS/JS执行环境,在需要TS代码复用的场景中,可以使用.ts文件进行开发。.ets文件中可以使用ArkUI声明式UI范式、状态管理支持等能力。.ts文件中只能使用标准TS的语法。未来ArkTS语言(.ets文件)将持续优化,提供静态类型比如细化数值类型提升运行时效率,增加更多并发语法特性提升并发场景易用性以及性能。标准TypeScript语言(.ts文件)将随着TS版本升级,保持兼容。从API version 10 Release起,ArkTS在保持TypeScript基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,提升代码健壮性,并实现更好的运行性能。
如果你正在开发鸿蒙应用并且需要创建复杂的UI,那么使用ETS可能是更好的选择。而对于那些不需要依赖鸿蒙特定特性的通用逻辑代码,则可以选择使用标准的TypeScript。一些基础的库可以用ts开发,ts文件无法引用ets文件,使用ts开发就无法使用系统能力了。ArkTS通过规范强化静态检查和分析,使得在程序开发期能检测更多错误,提升程序稳定性,并实现更好的运行性能,使用ets在性能上会有优势。
二、使用场景
在鸿蒙操作系统(HarmonyOS)中,ETS(Enhanced TypeScript)和TS(TypeScript)文件都有其特定的使用场景。理解这些场景可以帮助开发者更好地组织代码并利用每种语言的优势。
ETS (Enhanced TypeScript) 的使用场景
UI组件开发:
当你需要创建用户界面时,ETS是首选。它与ArkUI框架紧密集成,允许你使用声明式的语法来定义UI组件。
使用ETS可以轻松地构建复杂的布局,并且能够很好地管理状态和生命周期。
响应式设计:
ETS支持响应式编程模式,这使得处理UI的状态变化变得更加简单。你可以定义观察者和依赖关系,当数据发生变化时,相关的UI部分会自动更新。
跨设备一致性:
由于ETS专为鸿蒙设计,它可以确保你的应用在不同的鸿蒙设备上具有一致的行为和外观。这对于实现无缝的多设备体验非常重要。
快速原型开发:
ETS提供的高级抽象和简洁语法可以加快UI的开发速度,适合于快速迭代和原型制作。
TS (TypeScript) 的使用场景
业务逻辑:
对于不直接涉及UI的部分,比如后端服务调用、数据处理、算法实现等,标准的TypeScript更加合适。
这些逻辑通常不需要依赖鸿蒙特有的API或特性,因此可以使用更通用的TypeScript来编写。
共享库和工具函数:
如果你需要创建一些可以在多个项目或多个平台间复用的库或工具函数,那么使用标准的TypeScript是一个好主意。
这样的库可以更容易地被其他非鸿蒙项目所采用。
第三方库集成:
当集成现有的JavaScript/TypeScript库时,使用标准的TypeScript可以让这个过程更加顺畅。许多流行的库都提供了TypeScript类型定义,可以直接使用。
性能关键部分:
在某些情况下,你可能希望对性能敏感的部分进行优化。虽然ETS也考虑了性能,但如果你需要更多的控制权,或者想要避免额外的编译开销,那么使用标准的TypeScript可能会更适合。
跨平台代码:
如果你的项目不仅仅针对鸿蒙系统,还打算支持其他平台(如Web、Node.js或其他移动平台),那么使用标准的TypeScript可以简化代码维护和复用。
在实际开发中,ETS和TS通常是结合使用的。例如,你可以使用ETS来创建所有的UI组件,同时使用TS来编写后台逻辑和服务层。这样既发挥了ETS在UI方面的优势,又保持了TS在业务逻辑上的灵活性和可移植性。
总之,选择ETS还是TS取决于具体的需求和上下文。对于鸿蒙应用来说,ETS主要用于UI相关的工作,而TS则适用于更广泛的逻辑处理和跨平台需求。
三、特殊场景
虽然在很多情况下你可以选择使用标准的TypeScript(TS),但在某些特定场景下,使用ETS是必须的或更为推荐的。以下是一些必须或强烈建议使用ETS的场景:
必须使用 ETS 的场景
声明式UI框架ArkUI:
如果你想要利用鸿蒙提供的声明式UI框架ArkUI来构建用户界面,那么你必须使用ETS。ArkUI提供了丰富的组件和布局容器,并且通过ETS的语法可以方便地创建和管理这些UI元素。
ArkUI支持的数据绑定、状态管理和响应式编程都是ETS特有的特性,这些特性使得开发者能够以更加简洁高效的方式编写UI代码。
自定义组件:
当你需要创建自定义的UI组件时,通常需要使用ETS。ETS允许你定义组件的结构、样式和行为,并且可以很容易地将这些组件复用到不同的地方。
生命周期方法:
ETS为组件定义了特定的生命周期方法,如onInit, onReady, onDestroy等。这些方法可以帮助你更好地控制组件的行为,在组件的不同阶段执行相应的逻辑。
如果你需要处理组件的初始化、渲染完成或销毁等生命周期事件,那么使用ETS是必要的。
状态管理:
ETS提供了内置的状态管理机制,比如使用@State装饰器来声明可观察的状态变量。当这些状态发生变化时,相关的UI会自动更新。
这种状态管理方式简化了状态与UI之间的同步问题,提高了开发效率。
特定API和功能:
鸿蒙系统的一些特定API和功能可能只在ETS中有对应的实现或更好的支持。例如,一些专为鸿蒙优化的服务接口或设备能力调用。
多线程并发:ArkTS提供了TaskPool和Worker两种多线程并发能力,适用于需要高并发处理的场景,如后台计算和数据快速显示等
强烈建议使用 ETS 的场景
快速原型开发:
即使不是强制性的,但如果你希望快速搭建一个原型或者进行敏捷开发,ETS的简洁语法和内置特性可以帮助你更快地完成任务。
跨设备一致性:
如果你的应用需要在多种鸿蒙设备上运行,并且要求一致的用户体验,那么使用ETS可以确保这一点,因为它针对鸿蒙进行了优化。
性能优化:
ETS的一些特性和优化可能有助于提高应用的性能,特别是在复杂的UI交互和数据处理方面。
总之,当你需要充分利用鸿蒙系统的UI框架和其他高级特性时,使用ETS是必不可少的。ETS不仅提供了一种更直观的方式来构建用户界面,还增强了开发者的生产力和应用的性能。对于非UI相关或通用逻辑的部分,仍然可以选择使用标准的TypeScript。