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

一、需要显式标注泛型函数类型实参
规则:arkts-no-inferred-generic-params
级别:错误
如果可以从传递给泛型函数的参数中推断出具体类型,ArkTS允许省略泛型类型实参。否则,省略泛型类型实参会发生编译时错误。
禁止仅基于泛型函数返回类型推断泛型类型参数。
TypeScript

function choose<T>(x: T, y: T): T {return Math.random() < 0.5 ? x: y;
}let x = choose(10, 20);   // 推断choose<number>(...)
let y = choose('10', 20); // 编译时错误function greet<T>(): T {return 'Hello' as T;
}
let z = greet() // T的类型被推断为“unknown”

ArkTS

function choose<T>(x: T, y: T): T {return Math.random() < 0.5 ? x: y;
}let x = choose(10, 20);   // 推断choose<number>(...)
let y = choose('10', 20); // 编译时错误function greet<T>(): T {return 'Hello' as T;
}
let z = greet<string>();

二、需要显式标注对象字面量的类型
规则:arkts-no-untyped-obj-literals
级别:错误
在ArkTS中,需要显式标注对象字面量的类型,否则,将发生编译时错误。在某些场景下,编译器可以根据上下文推断出字面量的类型。
在以下上下文中不支持使用字面量初始化类和接口:
初始化具有any、Object或object类型的任何对象
初始化带有方法的类或接口
初始化包含自定义含参数的构造函数的类
初始化带readonly字段的类
例子1
TypeScript

let o1 = {n: 42, s: 'foo'};
let o2: Object = {n: 42, s: 'foo'};
let o3: object = {n: 42, s: 'foo'};let oo: Object[] = [{n: 1, s: '1'}, {n: 2, s: '2'}];

ArkTS

class C1 {n: number = 0s: string = ''
}let o1: C1 = {n: 42, s: 'foo'};
let o2: C1 = {n: 42, s: 'foo'};
let o3: C1 = {n: 42, s: 'foo'};let oo: C1[] = [{n: 1, s: '1'}, {n: 2, s: '2'}];

例子2
TypeScript

class C2 {s: stringconstructor(s: string) {this.s = 's =' + s;}
}
let o4: C2 = {s: 'foo'};

ArkTS

class C2 {s: stringconstructor(s: string) {this.s = 's =' + s;}
}
let o4 = new C2('foo');

例子3
TypeScript

class C3 {readonly n: number = 0readonly s: string = ''
}
let o5: C3 = {n: 42, s: 'foo'};

ArkTS

class C3 {n: number = 0s: string = ''
}
let o5: C3 = {n: 42, s: 'foo'};

例子4
TypeScript

abstract class A {}
let o6: A = {};

ArkTS

abstract class A {}
class C extends A {}
let o6: C = {}; // 或 let o6: C = new C()

例子5
TypeScript

class C4 {n: number = 0s: string = ''f() {console.log('Hello');}
}
let o7: C4 = {n: 42, s: 'foo', f: () => {}};

ArkTS

class C4 {n: number = 0s: string = ''f() {console.log('Hello');}
}
let o7 = new C4();
o7.n = 42;
o7.s = 'foo';

例子6
TypeScript

class Point {x: number = 0y: number = 0
}function getPoint(o: Point): Point {return o;
}// TS支持structural typing,可以推断p的类型为Point
let p = {x: 5, y: 10};
getPoint(p);// 可通过上下文推断出对象字面量的类型为Point
getPoint({x: 5, y: 10});

ArkTS

class Point {x: number = 0y: number = 0// 在字面量初始化之前,使用constructor()创建一个有效对象。// 由于没有为Point定义构造函数,编译器将自动添加一个默认构造函数。
}function getPoint(o: Point): Point {return o;
}// 字面量初始化需要显式定义类型
let p: Point = {x: 5, y: 10};
getPoint(p);// getPoint接受Point类型,字面量初始化生成一个Point的新实例
getPoint({x: 5, y: 10});

相关约束
对象字面量不能用于类型声明
数组字面量必须仅包含可推断类型的元素
三、对象字面量不能用于类型声明
规则:arkts-no-obj-literals-as-types
级别:错误
ArkTS不支持使用对象字面量声明类型,可以使用类或者接口声明类型。
TypeScript

let o: {x: number, y: number} = {x: 2,y: 3
}type S = Set<{x: number, y: number}>

ArkTS

class O {x: number = 0y: number = 0
}let o: O = {x: 2, y: 3};type S = Set<O>

相关约束
对象字面量必须对应某些显式声明的类或接口
数组字面量必须仅包含可推断类型的元素

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Perl脚本学习(一)-- 基础语法

系列文章目录 第一章 Perl脚本学习&#xff08;一&#xff09;-- 基础语法 一、Perl Perl 程序由声明与语句组成&#xff0c;程序自上而下执行&#xff0c;包含了循环&#xff0c;条件控制&#xff0c;每个语句以分号 ; 结束。Perl 语言没有严格的格式规范。 二、Perl简单使用…

TikTok达人合作中的消费者行为研究:精准营销新趋势

随着全球社交媒体技术的飞速发展&#xff0c;TikTok作为短视频领域的佼佼者&#xff0c;其独特的达人带货模式不仅成为驱动消费市场发展的新力量&#xff0c;还深刻改变了消费者的购买行为。本文Nox聚星将和大家探讨TikTok达人合作过程中消费者的行为模式和偏好变化。 一、消费…

SkyWalking入门搭建【apache-skywalking-apm-10.0.0】

Java学习文档 视频讲解 文章目录 一、准备二、服务启动2-1、Nacos启动2-2、SkyWalking服务端启动2-3、SkyWalking控制台启动2-4、自定义服务接入 SkyWalking 三、常用监控3-1、服务请求通过率3-2、服务请求拓扑图3-3、链路 四、日志配置五、性能剖析六、数据持久化6-1、MySQL持…

认识R与数据库连接和网络爬虫,学会在R中使用SQL语言

R语言作为一种强大的统计计算和数据分析工具,不仅在数据处理和可视化方面表现出色,还在与数据库连接和网络爬虫方面具备强大功能。本文将介绍如何在R中进行数据库连接和网络爬虫,并展示如何使用SQL语言在R中进行数据操作。 一、R与SQL数据库 1、认识SQL数据库 SQL(Struc…

企业怎么才能用上大语言模型?

题图&#xff5c;视觉中国 以ChatGPT为起点&#xff0c;大语言模型&#xff08;LLM&#xff09;用全面的技术创新&#xff0c;以及在用户和产业中的应用落地&#xff0c;再次掀起了一个AI新浪潮。 与它的前辈们相比&#xff0c;大语言模型因为打通了语言这一人类沟通中介&…

【并发编程】-4.Lock接口与AQS

Lock接口概念 概念&#xff1a;JDK1.5时&#xff0c;在Java.uitl.concurrent并发包中添加了Lock锁接口&#xff0c;其中定义了lock()、unLock()、tryLock()、lockInterruptibly()、newCondition()等一系列接口&#xff0c;它属于是JAVA语言层面的内置锁&#xff1b;特性&#…

47、PHP实现机器人的运动范围

题目&#xff1a; PHP 实现机器人的运动范围 描述&#xff1a; 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动&#xff0c;每一次只能向左&#xff0c;右&#xff0c;上&#xff0c;下四个方向移动一格&#xff0c;但是不能进入行坐标和列坐标的数位之和大于k…

探索云计算的未来:边缘计算如何重塑IT格局

目录 一、引言 二、边缘计算的基本概念与特性 1. 基本概念 2. 技术特性 三、边缘计算如何重塑IT基础设施 1. 分布式计算架构的兴起 2. 边缘节点的部署与管理 3. 数据流与业务逻辑的重新设计 4. 安全性与隐私保护的加强 四、边缘计算在关键行业的应用实践 1. 智能制造…

关联查询(xml)

多对多&#xff1a;数据库中需要有中间表&#xff0c;在两个实体类中都加入对方的List集合&#xff0c;在写查询语句时写三张表

MySQL第一阶段:多表查询、事务

继续我的MySQL之旅&#xff0c;继续上篇的DDL、DML、DQL、以及一些约束&#xff0c;该到了多表查询和事务的学习总结&#xff0c;以及相关的案例实现&#xff0c;为未来的复习以及深入的理解做好知识储备。 目录 多表查询 连接查询 内连接 外连接 子查询 事务 事务简介…

RTK高精度定位终端的功能跟用途

RTK高精度定位终端是一种集成了高精度定位技术的手持或便携式设备&#xff0c;其功能和用途广泛且重要。以下是RTK高精度定位终端的主要功能和用途&#xff1a; 一、功能 高精度定位&#xff1a; RTK技术通过接收卫星信号和地面基站的差分修正数据&#xff0c;实现厘米级甚至…

开源安全信息和事件管理(SIEM)平台OSSIM

简介 OSSIM&#xff0c;开源安全信息和事件管理&#xff08;SIEM&#xff09;产品&#xff0c;提供了经过验证的核心SIEM功能&#xff0c;包括事件收集、标准化和关联。 OSSIM作为一个开源平台&#xff0c;具有灵活性和可定制性高的优点&#xff0c;允许用户根据自己的特定需…

Java Linux操作系统

1、操作系统是协助用户调度硬件工作&#xff0c;充当用户和计算机硬件之间的桥梁 2、Linux内核 提供了linux系统的主要功能 3、发行版Centos&#xff1a;内核应用程序 4、快照&#xff1a;保存虚拟机的状态&#xff0c;当虚拟机出现问题的时候&#xff0c;可以恢复原始的状态…

Excel下载模板文件和导入文件的步骤

一、配置api // 题目导入模板下载接口 export function exportTemplate() {return request({url: /edu/question/exportTemplate,method: get,//必加header: {headers: {Content-Type: application/x-download},},responseType: "blob",//必加}) } // 题目模板数据导…

华为强制恢复出厂设置后如何恢复数据?数据重生的2个方法介绍

华为作为全球知名的手机品牌&#xff0c;其产品在市场上广受欢迎。然而&#xff0c;有时由于各种原因&#xff0c;我们可能需要强制恢复出厂设置&#xff0c;这往往意味着数据的丢失。那么&#xff0c;如何在华为强制恢复出厂设置后&#xff0c;让数据“重生”呢&#xff1f;本…

Postman测试工具详细解读

目录 一、Postman的基本概念二、Postman的主要功能1. 请求构建2. 响应查看3. 断言与自动化测试4. 环境与变量5. 集合与文档化6. 与团队实时协作 三、Postman在API测试中的重要性1. 提高测试效率2. 保障API的稳定性3. 促进团队协作4. 生成文档与交流工具 四、Postman的使用技巧1…

Ubuntu24.04 deb文件 安装 MySQL8.4

Ubuntu24.04 deb文件 安装 MySQL8.4 ubuntu24.04 deb文件安装 MySQL8 升级系统 sudo apt update sudo apt -y dist-upgrade 安装常用工具 sudo apt -y install vim net-tools wget gcc make cmake lrzsz安装依赖 sudo apt -y install libmecab2 libjson-perl libaio1t64下载…

JavaEE - Spring Boot 简介

1.Maven 1.1 什么是Maven 翻译过来就是: Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念&#xff0c;Maven可以通 过⼀⼩段描述信息来管理项⽬的构建&#xff0c;报告和⽂档的项⽬管理⼯具软件。 可以理解为&#xff1a;Maven是一个项目管理工具…

关键词查找【Knuth-Morris-Pratt (KMP) 算法】

一个视频让你彻底学懂KMP算法_哔哩哔哩_bilibili KMP算法的核心是利用匹配失败后的信息&#xff0c;尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 public class KMP {// 计算部分匹配表 (LPS)private static int[] computeLPSArray(String pattern) {int[] lps new…

Arduino学习笔记1——IDE安装与起步

一、IDE安装 去浏览器直接搜索Arduino官网&#xff0c;点击Software栏进入下载界面&#xff0c;选择Windows操作系统&#xff1a; 新版IDE下载不需要提前勾选所下载的拓展包&#xff0c;下载好后直接点击安装即可。 安装好后打开Arduino IDE&#xff0c;会自动开始下载所需的…