ArkTS
ArkTS,即Ark TypeScript,是基于TypeScript的一种编程语言,它继承了TypeScript的静态类型检查和面向对象特性,并针对特定的应用场景进行了优化。掌握ArkTS函数与类型系统对于开发者来说至关重要,因为它不仅有助于编写更安全、高效的代码,还能提升开发体验和代码的可维护性。
ArkTS,即Ark TypeScript,是基于TypeScript的一种编程语言,它继承了TypeScript的静态类型检查和面向对象特性,并针对特定的应用场景进行了优化。掌握ArkTS函数与类型系统对于开发者来说至关重要,因为它不仅有助于编写更安全、高效的代码,还能提升开发体验和代码的可维护性。
函数
在ArkTS中,函数是一等公民,它们可以作为参数传递给其他函数,也可以作为返回值从函数中返回。此外,ArkTS还支持匿名函数、箭头函数以及高阶函数等高级特性。
声明函数
定义一个简单的函数,使用`function`关键字:
```typescript
function add(a: number, b: number): number {
return a + b;
}
console.log(add(1, 2)); // 输出: 3
```
箭头函数
箭头函数提供了更加简洁的语法,同时它也绑定了词法作用域的`this`:
```typescript
const subtract = (a: number, b: number): number => a - b;
console.log(subtract(5, 2)); // 输出: 3
```
高阶函数
高阶函数是指将函数作为参数或者返回值的函数。以下是一个接受函数作为参数的例子:
```typescript
function operateOnNumbers(a: number, b: number, operation: (x: number, y: number) => number): number {
return operation(a, b);
}
const multiply = (x: number, y: number): number => x * y;
console.log(operateOnNumbers(4, 2, multiply)); // 输出: 8
```
类型系统
ArkTS的类型系统是静态的,这意味着所有的类型检查都在编译时完成。这为开发者提供了更好的错误预防机制,并且IDE工具能够提供更智能的代码补全和重构建议。
基本类型
ArkTS支持多种基本数据类型,包括但不限于:
- `boolean`
- `number`
- `string`
- `array`
- `tuple`
- `enum`
- `any`
- `void`
- `null`
- `undefined`
- `never`
使用示例
```typescript
let isDone: boolean = false;
let age: number = 26;
let name: string = "Alice";
let list: number[] = [1, 2, 3];
let tuple: [string, number] = ["hello", 10];
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
function warnUser(): void {
console.log("This is my warning message");
}
let u: undefined = undefined;
let n: null = null;
// never类型的变量只能赋值为throw表达式或不能达到的return语句
function error(message: string): never {
throw new Error(message);
}
```
接口(Interfaces)
接口用于定义对象的结构,包括属性和方法。通过接口,我们可以确保对象遵循一定的契约。
```typescript
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = { size: 10, label: "Size 10 Object" };
printLabel(myObj); // 正确,尽管myObj有额外的属性
```
泛型(Generics)
泛型允许我们创建灵活的、可复用的组件。它可以应用于函数、类和接口。
```typescript
function identity(arg: T): T {
return arg;
}
let output = identity("myString"); // 指定T为string
```
联合类型(Union Types)
联合类型表示一个值可以是几种类型之一。当一个值为联合类型时,任何操作都必须考虑到所有可能的类型。
```typescript
function padLeft(value: string, padding: string | number) {
if (typeof padding === "number") {
return Array(padding + 1).join(" ") + value;
}
return padding + value;
}
console.log(padLeft("Hello world", 4)); // 输出: " Hello world"
```
交叉类型(Intersection Types)
交叉类型组合多个类型成一个新的类型,这个新类型会拥有这些类型的所有成员。
```typescript
interface Errorable {
error?: string;
}
interface HasSuccessFlag {
success: boolean;
}
type SuccessOrFailure = Errorable & HasSuccessFlag;
const s: SuccessOrFailure = { success: true };
```
类型别名(Type Aliases)
类型别名用来给一个类型起个新名字。它们和接口类似,但有一些不同之处,比如可以用于原始类型、联合类型和交叉类型。
```typescript
type Name = string;
type NameOrNumber = Name | number;
type Message = { text: string };
function greet(name: Name): string {
return "Hello, " + name;
}
greet("Alice"); // 正确
```
类型断言(Type Assertions)
有时候你比编译器更了解某个值的实际类型,这时你可以使用类型断言来告诉编译器该值的类型。
```typescript
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
```
类型推论(Type Inference)
大多数情况下,ArkTS可以自动推导出类型,因此不需要显式地指定类型。
```typescript
let inferredString = "Hello"; // 类型被推断为string
```
函数重载(Function Overloads)
函数重载允许为同一个函数提供多个调用签名。实际的实现部分仍然只有一个,但是可以通过不同的参数列表来调用。
```typescript
function makeDate(timestamp: number): Date;
function makeDate(m: number, d: number, y: number): Date;
function makeDate(mOrTimestamp: number, d?: number, y?: number): Date {
if (d !== undefined && y !== undefined) {
return new Date(y, mOrTimestamp, d);
} else {
return new Date(mOrTimestamp);
}
}
const d1 = makeDate(12345678);
const d2 = makeDate(5, 5, 5);
更多推荐



所有评论(0)