ArkTs语法学习
1.函数声明和使用
function 函数名(参数列表) : 返回类型 {
函数体
}
function printStudentsInfo(students: string[]) : void {
for (let student of students) {
console.log(student)
}
}
printStudentsInfo(['xiaoming', 'xiaozhang', 'xiaowang', 'xiaoli']);
其中参数列表包含了:必选参数/可选参数/默认参数/剩余参数
function fun1(a: number, b ? : number) : number {
return b ? a + b : a;
}
其中a是必须输入参数,b是可选参数
func1(a)
func2(a, b)
剩余参数:
function func3(a : number, ...Args: number[]):void {
console.info('Args: ', JSON.stringify(Args));
}
func3(1,2,3,4,5)
1.1 箭头函数 / lambda表达式
(参数列表) : 返回类型 => { 函数体 }
箭头函数返回类型可以省略,返回类型通过函数体推断:
const printInfo = (name: string) : void = > {console.log(name)}
执行体只有一行的时候可以省略花括号:
const printInfo = (name:string)=>connsole.log(name);
printInfo("xiaoming");
箭头函数还可以作为回调函数
let students:string[] = ['xiaoming', 'xiaozhang', 'xiaowang'];
students.forEach((student: string)) => console.log(student);
1.2 闭包函数
一个函数可以将另一个函数当做返回值,保留对内部作用域的访问
function outerFunc() : () => string {
let count = 0;
return () : string => {
count++;
return count.toString();
}
}
let invoker = outerFunc();
将一个函数声明定义为一个类型,函数参数或者返回值
type returnType = () =>string;
function outerFunc() : returnType {
let count = 0;
return () : string => {
count++;
return count.toString();
}
}
let invoker = outerFunc();
console.log(invoker());
2. 类的声明和使用
class Person {
name:string = 'xiaoming';
age:number = 20;
isMale:boolean = true;
}
const person = new Person();
consloe.log(person.name);
如果需要自定义不同类型的对象,那就需要通过constructor构造函数
class Person {
name:string = 'xiaoming';
age:number = 20;
isMale:boolean = true;
constructor(name:string, age:number, isMale:boolean) {
this.name = name;
thie.age = age;
this.isMale = isMale;
}
}
const person: Person = {name:'xiaozhang', age:29, isMale:true};
2.1 类的多态
支持封装/继承/多态
封装:
继承:extends表示继承,super关键字访问父类
class Employee extends Person {
department: string;
constructor(name:string, age:number, isMale:boolean, department:string) {
super(name, age, isMale);
this.department = department;
}
}
多态:子类继承并且重写父类的方法,使不同的实例对象对同一行为有不同的表现
重写了父类的printInfo方法
class Employee extends Person {
department: string;
constructor(name:string, age:number, isMale:boolean, department:string) {
super(name, age, isMale);
this.department = department;
}
public printInfo():void {
super.printInfo();
console.log('working in ${this.department}');
}
}
3.接口的声明和使用
interface AreaSize {
Width: number;
height: number;
calculateAreaSize(): number;
someMethod(): void;
}
class RectangleSize implements AreaSize {
width: number = 0;
height: number = 0;
someMethod(): void {
console.log(`someMethod called`);
}
calculateAreaSize(): number {
this.someMethod();
return this.width * this.height;
}
}
4. 命名空间的概念和使用
命名空间中的变量/类等都需要通过export,供命名空间外部访问
5.模块的导入和导出
多个文件实现共同开发就需要使用模块的概念
在另外的文件中,就需要通过import导入变量、函数、类等
import {Person} from './Person';
const person = new Person('Xiaozhang', 20 ,true);
person.printInfo();
export from从一个模块中导出所有的导出项
更多的语言介绍参照官网:
华为开发者学堂