当前位置:   article > 正文

学习TypeScript,为鸿蒙的ArkTS学习做准备_鸿蒙 typescript

鸿蒙 typescript
因为ArkTS和TypeScript很像,所以先学习TypeScript对掌握ArkTS很有帮助,我学完感觉和C++、java有很大的相似之处,当然可能还有其他语言,但我并不是很了解哈,总而言之,TypeScript语言集齐了其他语言的很多优点,值得学习

快速熟悉TypeScript

写的代码可以在这个网址练习或验证代码是否正确(演练场中练习代码):TypeScript: JavaScript With Syntax For Types.

变量声明:

let msg: string = 'hello world'

| | |

| | 变量的数据类型

| 变量名,自定义

声明变量的关键字,const代表常量,let代表变量

变量的数据类型种类
  1. //字符串,可以用单引号或者双引号
  2. let msg: string = "hello"
  3. console.log('msg'+msg)
  4. //数值,整数,浮点数都可以
  5. let age: number = 21
  6. console.log('age:'+age)
  7. //布尔
  8. let finished: boolean = true
  9. console.log('finished'+finished)
  10. //any:不确定类型,可以是任意类型,赋成jack也能改成21
  11. let a: any = 'jack'
  12. a=21
  13. //union:联合类型,可以是多个指定类型中的一种
  14. let u: string|number|boolean = 'rose'
  15. u = 18
  16. console.log("u:"+u)
  17. //对象
  18. let p = {name:'Jack',age:12}
  19. console.log(p.name)
  20. console.log(p['name'])
  21. //数组,元素可以是任意其他元素
  22. let names: Array<string> = ['Jack','Rose']
  23. let ages: number[] = [21,18]
  24. console.log(names[0])

条件控制

支持if - else 和 switch

if-else
  1. let num:number = 21
  2. if(num % 2 === 0){
  3. console.log(num + '是偶数')
  4. }else{
  5. console.log(num + '是奇数')
  6. }
  7. //判断是否为正数
  8. if(num > 0){
  9. console.log(num+'是正数')
  10. }else if(num < 0){
  11. console.log(num+'是负数')
  12. }else{
  13. console.log(num+'为0')
  14. }
  15. //判断变量是否存在
  16. let data: any;
  17. if(data){
  18. console.log("数据存在:"+data)
  19. }else{
  20. console.log("数据不存在!")
  21. }
注意1

‘’===‘’是比较严格比较操作符,他在比较时不会进行类型转换当数据值和类型都相等才会返回true。

‘’==‘’是相等比较操作符,它在比较时会进行隐性的数据转换,把两个比较数转换为同一种类型,会有意想不到的结果。

  1. console.log(1 == "1"); // true
  2. console.log(true == 1); // true
注意2

TypeScript中,空字符串,数字0,null,underfined都被认为是false,其他则为true

  1. if(true){
  2. //num非空,可以执行逻辑
  3. }

用途:一般情况下,当一个数啥也没有,我们并不用处理它,用这个知识点就可以判定它存不存在,可以帮助我们节省麻烦。

switch

switch和其他编程语言中差不多

  1. let grade: string='A'
  2. switch(grade){
  3. case 'A':{
  4. console.log('优秀')
  5. break
  6. }
  7. case 'B':{
  8. console.log('合格')
  9. break
  10. }
  11. }

循环迭代

for和while

  1. for(let i = 1;i<=10;i++){
  2. console.log("点赞" + i + "次")
  3. }
  4. let i = 1;
  5. while(i <= 10){
  6. console.log("点赞" + i + "次")
  7. i++;
  8. }

当然,一些内置类型有自己的快捷语法,比如Array等

  1. let names: string[] = ["Jack","Rose"]
  2. //fot in 迭代器,遍历得到数组角标
  3. for(const i in names){
  4. console.log(i + ':' +names[i]) //i就是拿到的角标,输出i就是输出下标
  5. }
  6. //for of 迭代器,直接得到元素
  7. for(const name of names){
  8. console.log(name)
  9. }

函数

函数用function关键字来声明函数,并且支持可选参数、默认参数、箭头函数等特殊语法。

  1. //无返回值,void可省略
  2. function sayHello(name: string):void{
  3. console.log("你好," + name +"!")
  4. }
  5. //有返回值函数
  6. function sum(x: number,y: number): number{
  7. return x + y
  8. }
  9. let result = sum(21, 18)
  10. console.log("21 +18" + result)
  11. //箭头函数(简单定义函数的方法)
  12. let sayHi = (name: string) =>{ //没有写function,因为这里默认定义的变量的类型是function
  13. console.log("你好," + name + "!")
  14. }
  15. sayHi("Rose")
  16. //可选参数,在参数后加?,表示该参数是可选的
  17. function sayHello(name?: string){
  18. name = name ? name : "陌生人"
  19. console.log("你好," + name + "!")
  20. }
  21. sayHello("Jack")
  22. sayHello()
  23. //默认参数
  24. function say(name: string = "陌生人"){ //这里看起来像是把name定义成陌生人
  25. console.log("你好" + name +"!") //但实际上是如果没传参,用定义的,传参了就用传入的参数
  26. }
  27. say("Jack")
  28. say()

类和接口

typescript具有面向对象编程的基本语法,例如Interface\class\enum等。也具备封装、继承、多态等面向对象基本特征。

  1. //定义枚举
  2. enum M{
  3. HI = "hi",
  4. HELLO = "Hello"
  5. }
  6. //定义接口,抽象方法接受枚举参数
  7. interface A{
  8. say(m: M):void //凡是接口和类内的方法不需要加function关键字
  9. } //这里的方法名叫say ,参数是m 类型是M前面定义的,返回值是void,无返回值
  10. //定义一个类来实现接口
  11. class B implements A{ //实现了A接口
  12. say(m: M):void{
  13. console.log(m + ",I am B")
  14. }
  15. }
  16. //初始化对象
  17. let a:A = new B()//这里是把子类对象赋值给了父类类型,a的类型是A,由B实现,
  18. //所以也没错,正常来说应该是a:B
  19. //调用方法,传递枚举参数
  20. a.say(M.HI)
  1. class Rectangle{
  2. private width: number
  3. private length: number
  4. constructor(width: number,length: number){
  5. this.width = width
  6. this.length = length
  7. }
  8. public area(): number{
  9. return this.width * this.length
  10. }
  11. }
  12. class Square extends Rectangle{
  13. constructor(side: number){
  14. super(side, side)
  15. }
  16. }
  17. let s = new Square(10)
  18. console.log("正方形面积为:"+ s.area())

模块开发

目的:提高代码复用性,应用复杂时,我们可以把功能抽取到单独的ts文件中,每个文件都是一个模块(module),模块之间可以相互加载,提高代码复用性

注意文件名,这个是rectangle.ts文件

  1. //定义矩形类,通过export导出
  2. export class Rectangle{
  3. private width: number
  4. private length: number
  5. constructor(width: number,length: number){
  6. this.width = width
  7. this.length = length
  8. }
  9. public area(): number{
  10. return this.width * this.length
  11. }
  12. }
  13. //定义工具方法,求矩形面积,并通过export导出
  14. export function area(rec: Rectangle): number{
  15. return rec.width * rec.length
  16. }

再定义一个index.ts

  1. //通过import语法导入,from后面写文件的地址
  2. import {Rectangle, area} from'../rectangle' //这里是上目录
  3. //创建Rectangle对象
  4. let r = new Rectangle(10,20)
  5. //调用area方法
  6. console.log("面积为:" + area(r))
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/339359
推荐阅读
相关标签
  

闽ICP备14008679号