数据类型

61 阅读2分钟

ArkTS是一种设计用于构建高性能应用的编程语言。它在继承TypeScript语法的基础上进行了优化,以提供更高的性能和开发效率。

TypeScript是在JavaScript基础上通过添加类型定义扩展而来的,ArkTS则是TypeScript的进一步扩展。TypeScript提供了一种更结构化的JavaScript编码方法,深受开发者喜爱。ArkTS保持了TypeScript的大部分语法,旨在为现有的TypeScript开发者实现无缝过渡,帮助移动开发者快速上手。

ArkTS语言设计中考虑了与TypeScript和JavaScript的互通性。许多移动应用开发者希望重用TypeScript和JavaScript代码及库,因此ArkTS提供与TypeScript和JavaScript的无缝互通,使开发者可以轻松集成TypeScript和JavaScript代码到应用中,充分利用现有代码和库进行ArkTS开发。

1. 基本类型

1.1 Number数字类型

  • Number用于表示证书和浮点数
  • number类型在表示大整数(即超过-9007199254740991~9007199254740991)时会造成精度丢失。在开发时可以按需使用bigInt类型来确保精度
 let age: number = 30;
 let price: number = 19.99;
 let temperature: number = -5.5
 
 let bigInt: BigInt = BigInt('999999999999999999999999999999999999999999999999999999999999');
console.info('bigInt:' + bigInt.toString());

浮点数字面量包括以下部分:

  • 十进制整数,可为有符号数(前缀为“+”或“-”)。
  • 小数点(“.”)。
  • 小数部分(由十进制数字字符串表示)。
  • 指数部分,以“e”或“E”开头,后跟有符号(前缀为“+”或“-”)或无符号整数。

Number和number有什么区别?

number:是一个基本类型,没有类的定义的,没有什么属性可以用

Number:是一个包装类型,类的类型,具有属性和行为的

1.2 String字符串

  • String 用于表示文本数据
  • 支持字符串拼接、模板字符串等操作

字符串字面量由单引号(')或双引号(")之间括起来的零个或多个字符组成。字符串字面量还有一特殊形式,是用反向单引号(`)括起来的模板字面量。

let s1 = 'Hello, world!\n';
let s2 = "this is a string";
let a = 'Success';
let s3 = `The result is ${a}`;

1.3 boolean类型

boolean类型由true和false两个逻辑值组成

let isDone: boolean = false;

// ...

if (isDone) {
  console.info('Done!');
}

1.4 void类型

  • void类型用于指定函数没有返回值
  • 通常用于函数的返回类型,表示该函数不返回任何值。
function logMessage(message: string): void {
 console.log(message);
 }

1.5 Null 和 Undefined

  • Null 表示一个明确的空值
  • Undefined 表示一个变量未被赋值或未初始化时的默认状态

简单的理解,null是指定的东西为空,undefined表示不存在该变量

let unknownValue: null = null;
let uninitializedValue: undefined = undefined;

2. 复合类型

2.1 Array 数组

数组可由数组复合字面量赋值。数组复合字面量是用方括号括起来的零个或多个表达式列表,每个表达式为数组中的一个元素。数组的长度由数组中元素的个数确定。数组中第一个元素的索引为0。

  • Array 用于存储多个值。可以是同一类型或不同类型的值(根据定义的类型)
  • 支持常见的数组操作,如遍历、索引访问、数组方法等
let numbers: number[] = [1, 2, 3, 4];
let names: string[] = ["Alice", "Bob", "Charlie"]

2.2 Tuple 元组

Tuple 是一种固定大小、已知类型的数组。每个元素可以有不同的类型

let person: [string, number] = ["Alice", 30]

2.3 Object 对象

  • Object 用于表示一组无序的键值对。键通常是字符串或符号,值可以是任何类型
  • 对象类型可以用 interface 或 示例: type 来定义
let o1: Object = 'Alice';
let o2: Object = ['a','b'];
let o3: Object = 1;

2.4 enum 枚举

是预先定义的一组命名值的值类型,其中命名值又称为枚举常量

// 使用枚举常量时必须以枚举类型名称为前缀
enum ColorSet { Red, Green, Blue }
let c: ColorSet = ColorSet.Red;

2.5 Union 联合类型

是由多个类型组合成的引用类型

联合类型包含了变量可能的所有类型

class Cat {
  name: string = 'cat';
  // ...
}
class Dog {
  name: string = 'dog';
  // ...
}
class Frog {
  name: string = 'frog';
  // ...
}
type Animal = Cat | Dog | Frog | number | string | null | undefined;
// Cat、Dog、Frog是一些类型(类或接口)

let animal: Animal = new Cat();
animal = new Frog();
animal = 42;
animal = 'dog';
animal = undefined;
// 可以将类型为联合类型的变量赋值为任何组成类型的有效值

可以使用不同机制获取联合类型中的特定类型值。

class Cat { sleep () {}; meow () {} }
class Dog { sleep () {}; bark () {} }
class Frog { sleep () {}; leap () {} }

type Animal = Cat | Dog | Frog;

function foo(animal: Animal) {
  if (animal instanceof Frog) {
    animal.leap();  // animal在这里是Frog类型
  }
  animal.sleep(); // Animal具有sleep方法
}

2.6 Funtion 函数类型

let add: (x: number, y: number) => number = (x, y) => x + y;
 let greet: (name: string) => void = (name) => console.log(`Hello, ${name}`);

2.7 Interface 接口

定义一个对象的形状,可以描述对象的结构、方法等

interface Person {
 name: string;
 age: number;
 greet(): void;
 }
 let person: Person = {
 name: "Alice",
 age: 30,
 greet() {
 console.log(`Hello, ${this.name}`);
 }
 }