布尔值、数字、字符串、数组、元组、枚举、UnKnown、void、Null Undefined
联合类型
//布尔值
let isDone: boolean = false
//数字 可以是十进制,也可以是二进制、八进制、十六进制,输出后都会转化为十进制
let decLiteral : number = 2023;
let binaryLiteral: number = 0b11111100111;
let octalLiteral: number = 0o3747;
let hexLiteral: number = 0x7e7;
//字符串 可以单引号也可以是引号
let name : string = "jack";
let name1 : string = 'jack';
//数组 1:元素类型后直接跟[] 2:使用数组范型:Array<元素类型>
let list : number[] = [1,2,3,4,5];
let list2 : Array<number> = [1,2,3,4,5];
//元组 元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let x : [string, number] = ['jack',10];
//枚举 enum类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。
enum Color {Red, Green, Blue};
let c : Color = Color.Red;
//void 函数没有返回值;
function test() : void {
console.log("this is begin");
}
//Null Undefined undefined和null两者各自有自己的类型分别叫做undefined和null。
let u : undefined = undefined;
let n : null = null;
//联合类型 表示取值可以是多种类型的一种
let myFavoriteNumber : string | number;
myFavoriteNumber = "seven"
myFavoriteNumber = 7;
if. if…else… switch…case…
函数声明要告诉编译器函数的名称、返回类型和参数。TypeScript可以创建有名字的函数和匿名函数,
//有名函数
function add(x : number, y : number) : number{
return x + y;
}
//匿名函数
let myAdd = function (x : number , y : number) : number{
return x + y;
}
//可选参数
function buildName(firstName : string, lastName?:string){
if(lastName){
return firstName + "" + lastName;
}else{
return firstName;
}
let result1 = buildName("Bob");
let result2 = buildName("Bob", "Adams");
可选参数:在TypeScript里我们可以在参数名旁使用 ?实现可选参数的功能。 比如,我们想让lastName是可选的
剩余参数:剩余参数会被当作个数不限的可选参数,可以一个都没有,同样也可以有任意个:
//剩余参数
function getEmployeeName(firstName : string, ...restOfName : string[]){
return firstName + '' + restOfName.join('');
}
let employeeName = getEmployeeName('joseph', 'samuel', 'Lucas', 'Mackinzie');
箭头函数:是匿名函数的简写语法,省略了function 关键字;
( [param1, parma2,…param n] )=> {
// 代码块
}
let arrowFun = ( [param1, parma2,…param n] )=> {
// 代码块
}
arrowFun(param1, parma2,…param n)
TypeScript支持基于类的面向对象的编程方式,定义类的关键字为 class,后面紧跟类名。类描述了所创建的对象共同的属性和方法。
class Person {
private name : string;
private age : number;
constructor(name : string, age : number) {
this.name = name;
this.age = age;
}
public getPersonInfo() : string {
return `My name is ${this.name} and age is ${this.age}`;
}
}
let Person1 = new Person('jack',18);
Person1.getPersonInfo();
ypeScript中允许使用继承来扩展现有的类,对应的关键字为extends。
class Employee extends Person {
private department: string
constructor(name: string, age: number, department: string) {
super(name, age);
this.department = department;
}
public getEmployeeInfo(): string {
return this.getPersonInfo() + ` and work in ${this.department}`;
}
}
let person2 = new Employee('Tom', 28, 'HuaWei');
person2.getPersonInfo();
person2.getEmployeeInfo();
随着应用越来越大,通常要将代码拆分成多个文件,即所谓的模块(module)。模块可以相互加载,并可以使用特殊的指令 export 和 import 来交换功能,从另一个模块调用一个模块的函数
两个模块之间的关系是通过在文件级别上使用 import 和 export 建立的。模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。
//导出
export class NewsData {
title: string;
content: string;
imagesUrl: Array<NewsFile>;
source: string;
constructor(title: string, content: string, imagesUrl: Array<NewsFile>, source: string) {
this.title = title;
this.content = content;
this.imagesUrl = imagesUrl;
this.source = source;
}
}
导入:模块的导入操作与导出一样简单。 可以使用以下 import形式之一来导入其它模块中的导出内容
import { NewsData } from '../common/bean/NewsData';
当一个对象实现了Symbol.iterator属性时,我们认为它是可迭代的。一些内置类Array、Map、Set、String、Int32Array等对象具有可迭代性。
//for in 迭代的是对象的键;
// for of 迭代的是对象的值
let list3 = [4,5,6];
for (let i in list3) {
console.log(i); //0,1,2;
}
for (let element of list3) {
console.log(element + " "); // 4,5,6
}
TypeScript是一个开源的编程语言,本章节只介绍了TypeScript的基础语法知识,更多内容大家可以参考TypeScript的官方教程(https://www.typescriptlang.org/docs/)。大家在学习过程中,如果没有搭建TypeScript的开发环境,也可以直接使用在线Playground平台(https://www.typescriptlang.org/play)进行编码练习。已掌握TypeScript编程基础的学员可以跳过本章节的学习,没有接触过TypeScript的同学可以先补齐相关的语法基础,再进入HarmonyOS的相关开发学习之旅。