ArkTs语言基础知识整理

类型

  • String类型:字符串字面量还有一特殊形式,是用反向单引号()括起来的模板字面量:let s3 = The result is ${a}`;
  • Object类型:Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。
  • Union类型:联合类型,是由多个类型组合成的引用类型。联合类型包含了变量可能的所有类型:type Animal = Cat | Dog | Frog | number
if (animal instanceof Frog) {
    animal.leap();  // animal在这里是Frog类型
  }
  • Aliases类型:Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。
type Matrix = number[][];
type Handler = (s: string, no: number) => string;
type Predicate <T> = (x: T) => boolean;
type NullableObject = Object | null;

函数

  • 可选参数方式1:
function hello(name?: string) {
  if (name == undefined) {
    console.log('Hello!');
  } else {
    console.log(`Hello, ${name}!`);
  }
}

ps:函数的可选参数表示参数可能为undefined,在函数内部使用该参数时,需要进行非空值的判断,造成额外的开销。
根据业务需要,将函数参数声明为必须参数。可以考虑使用默认参数。

  • 返回类型-支持隐式:
// 推断返回类型为string
function goo() { return 'goo'; }
  • 闭包:由函数及声明该函数的环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。

在下例中,f函数返回了一个闭包,它捕获了count变量,每次调用z,count的值会被保留并递增。

function f(): () => number {
  let count = 0;
  let g = (): number => { count++; return count; };
  return g;
}

let z = f();
z(); // 返回:1
z(); // 返回:2

需要注意的是:
在ArkTS高性能编程实践一文中,建议使用高性能写法,其中说到:使用闭包会造成额外的闭包创建和访问开销。在性能敏感场景中,建议使用参数传递函数外的变量来替代使用闭包。

  • 可以使用对象字面量创建实例:
class Point {
  x: number = 0
  y: number = 0
}
let p: Point = {x: 42, y: 42};
  • 字段初始化: 为了减少运行时的错误和获得更好的执行性能,ArkTS要求所有字段在声明时或者构造函数中显式初始化。
  • 方法重写 - 方法重载签名 (构造函数也支持构造函数重载签名)
    通过重载签名,指定方法的不同调用。具体方法为,为同一个方法写入多个同名但签名不同的方法头,方法实现紧随其后。
class C {
  foo(x: number): void;            /* 第一个签名 */
  foo(x: string): void;            /* 第二个签名 */
  foo(x: number | string): void {  /* 实现签名 */
  }
}
  • Record类型的对象字面量
    泛型Record<K, V>用于将类型(键类型)的属性映射到另一个类型(值类型)。常用对象字面量来初始化该类型的值:
let map: Record<string, number> = {
  'John': 25,
  'Mary': 21,
}

map['John']; // 25

类型K可以是字符串类型或数值类型,而V可以是任何类型。

interface PersonInfo {
  age: number
  salary: number
}
let map: Record<string, PersonInfo> = {
  'John': { age: 25, salary: 10},
  'Mary': { age: 21, salary: 20}
}

空安全

  • 非空断言运算符: a!.value;
  • 空值合并运算符:return this.nick ?? ‘’;
  • 可选链:在访问对象属性时,如果该属性是undefined或者null,可选链运算符会返回undefined。p.spouse?.nick; // undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值