HarmonyOS鸿蒙Next中ArkTS与Typescript的区别?
HarmonyOS鸿蒙Next中ArkTS与Typescript的区别?
1、什么是ArkTS?
ArkTS是鸿蒙生态的应用开发语言。
ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者以更简洁、更自然的方式开发应用。
同时,它在保持TS基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测出更多错误,提升代码的健壮性,并实现更好的性能。
针对JS和TS并发能力支持有限的问题,ArkTS对并发编程API和能力进行了增强。
ArkTS支持与TS/JS高效互操作,兼容JS/TS生态。
2、ArkTS与TypeScript的关系?
ArkTS基于TypeScript的增强——规范的代码更好的保证正确性和性能,扩展语言特性增强UI声明式范式和并发能力支持。
TypeScript | ArkTS | |
---|---|---|
类型检查 | 可配置:开发人员可以使其更严格或更放松。风险:如果我们错误配置了类型检查器,那么静态类型带来的好处都将丧失 | 严格:不能放松或关闭类型检查。类型始终存在于代码中 |
编译 | 编译为JavaScript 编译后类型信息丢失 |
编译为字节码(特殊的运行时友好执行格式,如JVM或.NET) 类型信息在编译后得到保留 |
执行 | 可以在任何能够运行JavaScript的引擎上运行(V8、JavaScriptCore等) 引擎在运行JavaScript代码期间执行所有必要的运行时类型检查 |
在ArkRuntime上运行 由于静态检查的加强,运行时类型检查的数量大大减少(与Java或C#的水平相同) |
3、ArkTS和TypeScript的差异举例:
a、ArkTS中更严格的类型检查
// prog.ts - 示例1
class C {
n: number; // 在ArkTS中需要初始化
s: string; // 在ArkTS中需要初始化
}
let c = new C();
// prog.ts - 示例2
class C {
n: number = 0;
s: string = "";
}
let c: C = {
n: 42, // @ts-ignore <-- 在ArkTS中禁止关闭类型检查
s: null // 在ArkTS中报错(强化null-safety)
}
b、ArkTS不支持在运行时更改对象布局
// TypeScript代码
class C {
n: number = 0;
s: string = "";
}
let c = new C();
// 在ArkTS中,此处会报错
(c as any).newProperty = 'WOW';
// 在ArkTS中,此处会报错
delete (c as any).newProperty;
// ArkTS代码
class C {
n: number = 0;
s: string = "";
newProperty?: string;
}
let c = new C();
// 为可选属性赋值
c.newProperty = 'WOW';
// 置空可选属性
c.newProperty = undefined;
c、ArkTS对象字面量需标注类型
// TypeScript代码
const area = {
// 在ArkTS中,此处会报错
pixels: new ArrayBuffer(8),
offset: 0,
stride: 8,
region: {
size: {
width: 2,
heght: 1
},
x: 0,
y: 0
}
}
// ArkTS代码
import image from '@ohos.multimedia.image';
// Arae类型确定,每个属性的类型也随之确定
interface PositionArea {
pixels: ArrayBuffer;
offset: number;
stride: number;
region: Region;
}
const area: image.PositionArea = {
pixels: new ArrayBuffer(8),
offset: 0,
stride: 8,
region: {
size: {
width: 2,
heght: 1
},
x: 0,
y: 0
}
}
d、ArkTS禁止使用对象字面量初始化具有复杂constructor的类,在ArkTS中,如果需要创建这些class的实例,需要使用new操作符创建
// TypeScript代码
class C {
n: number;
s: string;
constructor(n: numhber) {
if (n<0) {
throw new Error('Wrong number')
}
this.n = n;
this.s = ""
}
}
// 使用new创建对象,运行时异常
let c1: C = new C(-42);
// 使用对象字面量创建对象(n值为负数)
let c2: C = { // 在ArkTS中此处会报错
n: -42,
s: 'foo'
}
console.log(c2.n) // -42
e、ArkTS不支持使用对象字面量初始化具有方法的类,请使用new操作符创建类的实例或者将类中方法改为类的实例属性(类型为方法)
// TypeScript代码
class C {
s: string = '';
m() {
console.log(this.s)
}
}
let c1: C = { // 在ArkTS中此处会报错
s: 'foo',
m: () => {
throw new Error();
}
}
// ArkTS代码
class C {
s: string = '';
m = () => {
console.log(this.s)
}
}
let c: C = {
s: 'foo',
m: () => {
throw new Error()
}
}
f、ArkTS不支持structural typing
// TypeScript代码
class C {
n: number = 0;
s: string = '';
}
class D {
b: boolean = false;
n: number = 0;
s: string = '';
}
function foo(c: C) {
console.log(c.s)
}
foo(new D()); // ArkTS中此处将报错
// foo虽然声明参数是C,但是也可以传递D,这种灵活性往往不符合开发者的意图,容易带来程序行为正确性的问题。
// ArkTS代码
class C {
n: number = 0;
s: string = '';
}
class D {
b: boolean = false;
n: number = 0;
s: string = '';
}
function fooC(c: C) {
console.log(c.s)
}
function fooD(c: D) {
console.log(c.s)
}
fooC(new C());
fooD(new D());
ArkTS是HarmonyOS鸿蒙Next中基于TypeScript的扩展语言,专为鸿蒙应用开发设计。ArkTS在TypeScript的基础上增加了对鸿蒙系统特性的支持,如声明式UI、状态管理等。ArkTS的语法与TypeScript高度兼容,但提供了更多针对鸿蒙生态的API和组件。ArkTS还优化了性能,特别是在UI渲染和事件处理方面,以适应鸿蒙系统的分布式架构。TypeScript是一种通用的编程语言,而ArkTS则更专注于鸿蒙应用开发,提供了更高效的开发体验和更好的系统集成。
更多关于HarmonyOS鸿蒙Next中ArkTS与Typescript的区别?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,ArkTS是基于TypeScript的扩展,专为鸿蒙系统设计。主要区别在于:ArkTS增加了对鸿蒙系统特有API的支持,优化了性能以适应嵌入式设备,并提供了更严格的类型检查和运行时安全机制。此外,ArkTS还引入了鸿蒙特有的UI组件和状态管理机制,以提升开发效率和用户体验。