HarmonyOS系统开发ArkTS基础编程语法

目录

一、变量及类型

二、函数

三、类

四、枚举

五、模块化


ArkTS基础编程语法的在线练习地址:https://www.typescriptlang.org/zh/play?#code/Q

一、变量及类型

1、变量声明

let 声明变量,赋值后可以修改

const 声明常量,赋值后便不能再修改

案例:

java 复制代码
  let   a:number=100;
  const b:number=200;

2、类型推断

let a=100;

const b=200;

根据初始值进类型推断

console.log(typeof c); //number 类型

3、数据类型

number 表示数字,包括整数和浮点数

string 表示字符串,单双引号均可。

boolean 表示布尔值: true 、 false

数组类型:元素类型[]

对象(object)类型:属性名称和属性值组成的数据结构

let a :number = 100

let b :number = -33

let c :number = 2.5

let d :number = -3.9

let a:string = '你好'

let b:string = "hello"

let isOpen:boolean = true

let isDone:boolean = false

let a: number[] = []

let b: string[] = ['你好', 'hello']

let person: {name:string, age:number, gender:string} = {name:'张三', age:10, gender:'男'};

let person={name:'张三', age:10, gender:'男'};

二、函数

1、函数

function 函数名(参数列表):返回值类型 {方法体}

function sum(a:number,b:number): number{

return a+b

}

注意:返回值类型不写,会自动推断

function sum(a: number, b: number) {

return a + b;

}

1.1特殊语法

=====================================================

可选参数:参数+? 占位,传值显示,不传值则显示 undefined

function getPersonInfo(name: string, age?: number): string {

return `name:{name},age:{age}`;

}

let p1 = getPersonInfo('zhagnsan')

console.log(p1); // "name:zhagnsan,age:undefined"

=====================================================

默认参数:不传值,则使用默认参数

function getPersonInfo(name: string, age: number=20): string {

return `name:{name},age:{age}`;

}

let p1 = getPersonInfo('zhagnsan')

console.log(p1); // "name:zhagnsan,age:20"

1.2特殊类型

=====================================================

联合类型:一个函数可能处理不同类型的值,这种函数就是联合类型

function printNumberOrString(message: number | string) {

console.log(message)

}

printNumberOrString('a')

printNumberOrString(1)

=====================================================

任意类型:函数需要处理任意类型的值,使用 any 类型

function print(message:any) {

console.log(message)

}

print('a')

print(1)

print(true)

2、匿名函数与箭头函数

forEach()接收函数作为参数,每遍历一次数据调用一次函数。

2.1匿名函数

变化过程

=====================================================

定义函数,将函数名作为 forEach() 参数

let numbers: number[] = [1, 2, 3, 4, 5]

function print(num:number):void{

console.log(num);

}

numbers.forEach(print)

=====================================================

直接将函数的定义写在 forEach() 中

let numbers: number[] = [1, 2, 3, 4, 5]

numbers.forEach(function print(num:number):void{

console.log(num);

})

=====================================================

函数名可以省略

参数类型可以省略(根据上下文自动判断)

返回值类型可以省略(根据上下文自动判断)

适用于简单且仅需1次性使用的场景

let numbers: number[] = [1, 2, 3, 4, 5]

numbers.forEach(function (num){

console.log(num);

})

2.2箭头函数

即lambda表达式,即对匿名函数进一步简化

=====================================================

function可以省略,参数列表和函数体用箭头代替

let numbers: number[] = [1, 2, 3, 4, 5]

numbers.forEach((num)=>{

console.log(num);

})

=====================================================

参数只有一个,括号()可以省略

let numbers: number[] = [1, 2, 3, 4, 5]

numbers.forEach( num =>{

console.log(num);

})

=====================================================

函数体只有一行代码,花括号{}可以省略,分号';'可以去掉

let numbers: number[] = [1, 2, 3, 4, 5]

numbers.forEach( num =>

console.log(num)

)

三、类

1、类的定义

class Person {

id:number;

name: string;

age: number = 18;

constructor(id: number, name: string,age: number) {

this.id = id;

this.name = name;

this.age = age;

}

introduce(): string {

return `hello,I am ${this.name},and I am ${this.age} years old`

}

}

2、创建对象

let person = new Person(1,'夏天',32)

3、属性和方法调用

console.log(person.age)

console.log(person.introduce())

4、静态成员(静态属性与静态方法)

class Utils{

static count:number=1;

static toLowerCase(str:string){

return str.toLowerCase();

}

}

console.log(Utils.count);

console.log(Utils.toLowerCase('Hello World'));

5、继承

class Person {

id:number;

name: string;

age: number = 18;

constructor(id: number, name: string,age: number) {

this.id = id;

this.name = name;

this.age = age;

}

introduce(): string {

return `hello,I am ${this.name},and I am ${this.age} years old`

}

}

class Student extends Person {

classNumber: string;

constructor(id: number, name: string,age: number, classNumber: string) {

super(id, name,age);

this.classNumber = classNumber;

}

introduce(): string {

return super.introduce()+`, and I am a student`;

}

}

let student = new Student(1,'xiaoming',21,'三年⼆班');

console.log(student.introduce());

6、访问修饰符

class Person {

private id:number;

private name: string;

private age: number = 18;

constructor(id: number, name: string,age: number) {

this.id = id;

this.name = name;

this.age = age;

}

introduce(): string {

return `hello,I am ${this.name},and I am ${this.age} years old`

}

getId() {

return this.id;

}

setId(id:number) {

this.id = id;

}

getName() {

return this.name;

}

setName(name:string) {

this.name = name;

}

getAge() {

return this.age;

}

setAge(age:number) {

this.age = age;

}

}

let person = new Person(1,'夏天',32)

console.log(person.getId())

console.log(person.getName())

console.log(person.getAge())

7、接口(interface)

interface Person {

id: number;

name: string;

introduce(): void;

}

class Student implements Person {

id: number;

name: string;

age: number;

constructor(id: number, name: string, age: number) {

this.id = id;

this.name = name;

this.age = age;

}

introduce(): void {

console.log('Hello,I am a student');

}

}

let s1: Student = new Student(1, 'zhangsan', 17);

console.log(s1.id);

console.log(s1.name);

console.log(s1.age);

s1.introduce();

8、多态

class Teacher implements Person {

id:number;

name:string;

age:number;

constructor(id:number, name:string, age:number) {

this.id = id;

this.name = name;

this.age = age;

}

introduce(): void {

console.log('Hello,I am a teacher');

}

}

let p1: Person = new Student(1, 'zhangsan', 17);

let p2: Person = new Teacher(2, 'lisi', 35);

p1.introduce();//Hello,I am a student

p2.introduce();//Hello,I am a teacher

8、使用接口描述对象类型

interface Person {

name: string;

age: number;

gender: string;

}

let person: Person = {name:'张三', age:10, gender:'男'};

四、枚举

enum Direction {

UP = 'up',

BOTTOM = 'bottom',

LEFT = 'left',

RIGHT = 'right'

}

console.log(Direction.UP) //up

console.log(Direction.BOTTOM) //bottom

五、模块化

export导出,imiport导入

=======================================================

使用花括号导出多个,产生问题,容易命名冲突

moduleA.ts

export function sayHello() {

console.log('hello module A');

}

export const printStr = 'hello world';

moduleB.ts

export function sayHello() {

console.log('hello module A');

}

export const printStr = 'hello world';

moduleC.ts

import { sayHello, printStr } from './moduleA';

import { sayHello, printStr } from './moduleB';

=======================================================

导入模块重命名,产生问题:冲突内容较多时,写法会冗长

moduleA.ts

export function sayHello() {

console.log('hello module A');

}

export const printStr = 'hello world';

moduleB.ts

export function sayHello() {

console.log('hello module A');

}

export const printStr = 'hello world';

moduleC.ts

import { sayHello as shA, printStr as psA } from './moduleA';

import { sayHello as shB, printStr as psB } from './moduleB';

=======================================================

直接模块对象命名,对象调用(推荐)

moduleA.ts

export function sayHello() {

console.log('hello module A');

}

export const printStr = 'hello world';

moduleB.ts

export function sayHello() {

console.log('hello module A');

}

export const printStr = 'hello world';

moduleC.ts

import * as A from './moduleA';

import * as B from './moduleB';

A.sayHello();

B.sayHello();

=======================================================

默认导出(加default),默认导入

moduleA.ts

export default function sayHello() {

console.log('hello module A');

}

moduleC.ts

import sayHelloA from './moduleA';

sayHelloA();

相关推荐
问道飞鱼6 分钟前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
k09337 分钟前
vue中proxy代理配置(测试一)
前端·javascript·vue.js
傻小胖9 分钟前
React 脚手架使用指南
前端·react.js·前端框架
程序员海军21 分钟前
2024 Nuxt3 年度生态总结
前端·nuxt.js
m0_7482567832 分钟前
SpringBoot 依赖之Spring Web
前端·spring boot·spring
web135085886351 小时前
前端node.js
前端·node.js·vim
m0_512744641 小时前
极客大挑战2024-web-wp(详细)
android·前端
若川1 小时前
Taro 源码揭秘:10. Taro 到底是怎样转换成小程序文件的?
前端·javascript·react.js
潜意识起点1 小时前
精通 CSS 阴影效果:从基础到高级应用
前端·css
奋斗吧程序媛1 小时前
删除VSCode上 origin/分支名,但GitLab上实际上不存在的分支
前端·vscode