ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。
而TypeScript是基于JavaScript的基础上做了进一步扩展,JavaScript是弱类型的开发语言,变量是没有类型的,没有类的概念,TypeScript是强类型的开发语言,是面向对象的开发语言与Java类似。
本篇文章内容大致内容如下,适合有一定编程基础的人看,个人认为,学习TypeScript简单入门看这一篇就够,如果觉得还不够的朋友勿喷勿喷!!!
一、变量声明
变量声明格式如下图
示例代码
// string 字符串,可以使用单引号也可以使用双引号
let msg: string = 'hello word'
console.log(msg)
//number 数值,整数,浮点都可以
let age: number = 6
console.log(age)
//boolean 布尔值,只能是true或false
let finished: boolean = true
console.log(finished)
//any 不确定类型,输入值可以是任意数据类型
let anyVal: any = 'zhangsan'
anyVal = 20
console.log(anyVal)
//union 联合类型,输入值可以是多个制定类型中的任意一种
let uVal: string|number|boolean = true
uVal = 'lisi'
uVal = 123
console.log(uVal)
//object 对象类型
let student = {name: 'jack', age: 21}
console.log(student.name)
console.log(student['name'])
//array 数组,元素可以是任意其他类型
let names: Array<string> = ['jack', 'jame']
let nums: number[] = [21, 23]
console.log(names[1])
如果有小伙伴想单纯的学习下typescript语法,不用下载开发工具,直接在线编程即可
TypeScript官网提供了在线编程地址 https://www.typescriptlang.org/play/?#code/Q
使用截图如下:
二、条件控制
条件控制比较简单,几乎与java一致,简单参考就行,实例代码如下
let age: number = 6
if(age%2 === 0){
console.log('age 为偶数')
}else if(age%3 == 0){
console.log('age 可以被3整除')
}else{
console.log('age 是其他数')
}
let grade: string = 'A'
switch(grade){
case 'A':
console.log('优秀')
break
case 'B':
console.log('优秀')
break;
case 'C':
console.log('优秀')
break;
default:
console.log('优秀')
break;
}
三、循环迭代
for与while、do while的使用也比较简单,这里只做代码实例
//普通for循环
for(let i=0; i<10; i++){
console.log("for 用户点击第"+i+"次")
}
//for in/of 迭代循环
let names: string[] = ['张三', '李四', '王五']
for(const i in names){
console.log("in 名字:"+names[i])
}
for(const name of names){
console.log("of 名字:"+name)
}
//while循环
let i = 0
while(i <= 10){
console.log("while 用户点击第"+i+"次")
i++
}
//do while循环
let j=0
do{
console.log("do while 用户点击第"+i+"次")
j++
}while(j <= 10)
四、函数
TypeScript常用function关键字声明函数,并且支持可选参数,默认参数,箭头函数等语法。示例如下:
/**
* 一、有参 & 无返回值 的普通函数
* @param name 变量名后面带?时代表为可选参数,可传可不传
*/
function sayHello(name?: string){
console.log('你好!'+(name ? name :'陌生人'))
}
sayHello('张三')
sayHello()
/**
* 二、有参 & 无返回值 的普通函数
* @param name 变量设置默认值
*/
function sayHello1(name: string = '陌生人'){
console.log('你好!'+name)
}
sayHello1('张三')
sayHello1()
/**
* 三、有参 & 无返回值 的普通函数
* @param val 变量可以输入 string值、number值、boolean值
*/
function printValue(val: string|number|boolean){
console.log("打印值为:"+val)
}
printValue('你好')
printValue(34)
printValue(true)
/**
* 四、有参 & 无返回值 的普通函数
* @param obj 变量为对象类型,对象参数可以可配
*/
function printObject(obj: {name: string, age?: number}){
console.log(obj.name + "今年 "+ (obj.age ? obj.age : 0) + '岁')
}
printObject({name:"王五"})
printObject({name:"张三", age: 28})
//五、有参 & 有返回值 的普通函数
function sum(num1: number, num2: number):number{
return num1 + num2
}
let result = sum(12, 28)
console.log("12 + 28 = "+ result)
//六、箭头函数
let getSum = (num1: number, num2: number):number =>{
return num1 + num2
}
let result2 = getSum(42, 28)
console.log("42 + 28 = "+ result2)
五、类与接口
TypeScript具备面向对象编程的基本语法,例如interface、class、enum等。也具备封装、继承、多态等面向对象基本特征。
//定义枚举
enum Msg{
Hi = "Hi",
Hello = "hello"
}
//定义接口
interface IPerson{
name: string
say(msg: Msg):void
}
//定义学生类 并实现IPerson接口
class Student implements IPerson{
name: string
//定义私有属性,学生的标题
private title: string
//类的构造函数
constructor(name: string, title: string){
this.name = name
this.title = title
}
//定义公共方法
public say(msg: Msg): void{
console.log(this.name + ' say:' + msg + ", i'm a " + this.title)
}
}
//定义老师类 并实现IPerson接口
class Teacher implements IPerson{
name: string
//定义私有属性,老师教的科目
private teach: string
//类的构造函数
constructor(name: string, teach: string){
this.name = name
this.teach = teach
}
public say(msg: Msg): void{
console.log(this.name + ' say:' + msg + ", i'm a teacher, i can "+ this.teach)
}
}
let student: IPerson = new Student('小明', 'student')
student.say(Msg.Hello)
let teacher: IPerson = new Teacher('王老师', 'Maths')
teacher.say(Msg.Hi)
六、模块开发
复杂应用开发过程中,我们可以把通用功能单独的ts文件中,每个文件都是一个模块(module),模块可以相互加载,提高代码的复用性。
我新建一个文件为rectangle.ts,代码如下
//定义矩形类,并通过export导出
export class Rectangle{
public width: number
public height: number
constructor(width: number, height: number){
this.width = width
this.height = height
}
}
//定义工具方法,计算矩形面积,并通过export导出
export function area(rect: Rectangle): number{
return rect.width * rect.height
}
我在index.ts文件中导入Rectangle,area并使用
//通过import关键词导入类或者方法,from后面写文件地址
import {Rectangle, area} from '../rectangle'
//创建Rectangle对象
let rect = new Rectangle(20, 30)
//调用area方法计算rect的面积
let areaVal = area(rect)
console.log("矩形面积为:"+areaVal)