Web

TypeScript

Posted by Kerwen Blog on May 29, 2024

介绍

TypeScript 是 JavaScript 的一个超集,扩展了 JavaScript 的语法,是由微软开发的自由和开源的编程语言。

安装

1
    npm install -g typescript

安装完成后我们可以使用 tsc -v 来查看版本号

1
2
    $ tsc -v
    Version 3.2.2

Hello world

1
2
    var message:string="Hello World“
    console.log(message)

通常使用.ts作为TypeScript代码文件的扩展名.

转换成Jayavscript

1
    tsc test.ts

面向对象编程

1
2
3
4
5
6
7
    class Site{
      name():void{
        console.log("hello")
      }
    }
    var obj = new Site();
    obj.name();

数据类型

任意类型 any

1
2
    let x:any =1;
    x='This is string'

数字类型 number

1
    let decLiteral: number = 6;

字符串类型 string

1
2
3
    let name: string = "Runoob";
    let years: number = 5;
    let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;

布尔类型 boolean

1
    let flag: boolean = true;

数组类型

1
    let arr: number[] = [1, 2];

元组

数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。
定义一对值分别为 string 和 number 的元组:

1
    let tom: [string, number] = ['Tom', 25];   

枚举 enum

1
2
3
    enum color{red,green,blue}
    let c : Color = Color.blue;
    console.log(c)

空值

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:

1
2
3
    function alertName(): void {
        alert('My name is Tom');
    }

Null 和 Undefined

在 TypeScript 中,可以使用 nullundefined 来定义这两个原始数据类型:

1
2
    let u: undefined = undefined;
    let n: null = null;

void 的区别是,undefinednull 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:

1
2
3
4
5
    // 这样不会报错
    let num: number = undefined;
    // 这样也不会报错
    let u: undefined;
    let num: number = u;

void 类型的变量不能赋值给 number 类型的变量:

1
2
3
4
    let u: void;
    let num: number = u;

    // Type 'void' is not assignable to type 'number'.

变量声明

1
    var [变量名] : [类型] = 值;

语句

条件语句

If 语句

1
2
3
4
5
6
7
8
    var num:number = 2 
    if(num > 0) { 
      console.log(num+" 是正数") 
    } else if(num < 0) { 
      console.log(num+" 是负数") 
    } else { 
      console.log(num+" 不是正数也不是负数") 
    }

Switch 语句

1
2
3
4
5
6
7
8
9
10
11
    var grade:string = "A"; 
      switch(grade) { 
      case "A": { 
        console.log("优"); 
        break; 
      } 
      default: { 
        console.log("非法输入"); 
        break;              
      } 
    }

循环

for 循环

1
2
3
4
5
6
7
    var num = 5;
    var i;
    var factorial = 1;
    for (i = num; i >= 1; i--) {
      factorial *= i;
    }
    console.log(factorial);

for…in 循环

1
2
3
4
5
6
    var j:any; 
    var n:any = "a b c" 
    
    for(j in n) {
      console.log(n[j])  
    }

while 循环

1
2
3
4
5
6
7
8
    var num:number = 5; 
    var factorial:number = 1; 
    
    while(num >=1) { 
      factorial = factorial * num; 
      num--; 
    } 
    console.log("5 的阶乘为:"+factorial);

函数

1
2
3
4
    function add(x: number, y: number): number {
      return x + y;
    }
    console.log(add(1,2))

可选参数

1
2
3
4
5
6
7
8
    function buildName(firstName: string, lastName?: string) {
    if (lastName)
            return firstName + " " + lastName;
    else
            return firstName;
    }
    
    let result1 = buildName("Bob");  // 正确

需要注意的是,可选参数必须接在必需参数后面。换句话说,可选参数后面不允许再出现必需参数.

默认参数

1
2
3
4
5
    function calculate(price:number, rate:number = 0.50) { 
      var discount = price * rate; 
      console.log("计算结果: ",discount); 
    } 
    calculate(1000) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Car {     
  engine:string;  

  // 构造函数
  constructor(engine:string) { 
    this.engine = engine 
  }

  // 方法
  disp():void { 
    console.log("发动机为 :   "+this.engine) 
  } 
}
var obj = new Car("Engine 1")

对象

对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等.

1
2
3
4
5
6
    var sites = { 
      site1:"Runoob", 
      site2:"Google" 
    }; 
    // 访问对象的值
    console.log(sites.site1) 

类型模板

1
2
3
4
5
6
7
8
9
    var sites = {
      site1: "Runoob",
      site2: "Google",
      sayHello: function () { } // 类型模板
    };
    sites.sayHello = function () {
      console.log("hello " + sites.site1);
    };
    sites.sayHello();

模块

项目中可以将代码拆分为多个文件,多个文件可以互相加载,并通过export和import关键字完成模块功能的交换。 模块是在其自身的作用域里执行,并不是在全局作用域,这意味着定义在模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。

1
2
3
4
5
6
7
8
9
10
11
12
13
    export class Mail {
            title:string;
            content:string;

            constructor(title:string,content:string){
                    this.title = title;
                    this.content = content;
            }
    }

    import {Mail} from './Mail';
    let mail = new Mail('邮箱标题','邮箱内容');
    mail.content;