TypeScript学习笔记(一)

431 阅读4分钟

1、第一个TypeScript Demo

  1. 新建一个文件 demo1.ts

  2. 编写一个方法并执行:

       function say() {
         let web = "Hello World"
         console.log(web)
       }
       say()
    
  3. 在命令行编译并执行该文件:

  • tsc demo1.ts// 将 ts文件编译成js文件
  • node demo1.js// 执行 js文件 命令行输出 "Hello World"
  1. 安装ts-node提高效率 每次运行ts文件都要先编译后执行,比较麻烦,所以可以安装ts-node提高效率:
  • npm install ts-node -g// 全局安装 ts-node
  • ts-node demo1.ts// 编译执行 ts文件 命令行输出 "Hello World"

2、TypeScript静态类型

静态类型是TypeScript的一个主要特点,一旦定义好一个变量的静态类型,不能再改变了

   let count: number = 1; // 定义count 是个 number 类型的静态类型。不能变更为其他类型
   count.toFixed();    // count 确定为 number 类型之后,会具备 number 类型的属性和方法
   // count = "hello"; // 赋值其他类型会报错

   interface XiaoJieJie { // 还可以通过interface(接口)来自定义静态类型
     name: string,
     age: number
   }

   let xiaohong: XiaoJieJie = { // 声明的变量必须符合自定义类型,不然会报错
     name: "小红",
     age: 18
   }

如果使用了静态类型,不仅意味着变量的类型不可以改变,还意味着类型的属性和方法也跟着确定了。这个特点就大大提高了程序的健壮性,并且编辑器这时候也会给你很好的语法提示,加快了你的开发效率。

3、TypeScript的基础静态类型和对象静态类型

  1. 基础静态类型 声明静态类型的方式很简单,在变量后面加 然后加上对应类型即可
  let num: number = 10086; 
  let myName: string = "cgw";
  常见的基础静态类型有:numberstringnullundefinedbooleansymbolvoid

2. 对象静态类型

  const person: { // 对象类型
    name: string, // 类型
    age: number
  } = {
    name: "小红", // 值
    age: 18
  }
  console.log(person)

  const persons: string[] = ["小红", "小兰", "小青"]; // 字符串数组类型

  class Person{}
  const dj: Person = new Person(); // 类 类型

  const see: () => string = () => "see"; // 函数 类型

4、TypeScript的类型注解和类型推断

  1. 类型注解 TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式。可以为变量、函数参数、函数返回值等添加类型注解。
  let num1: number = 12; // 该变量为number类型
  let num2: number = 20;

  function sum(a: number, b: number): number{ // 该函数接收两个number类型的参数,返回一个number类型的值
    return a + b; 
  }

  console.log(sum(num1, num2));
  1. 类型推断 当未给变量添加类型注解时,TypeScript会自动的去尝试分析变量的类型。 例如下面这行代码,虽然未给变量添加类型注解,但当鼠标放上去时,ts自动将其添加为number类型。

5、TypeScript的数组类型定义

  1. 简单数组类型
  let numArr: number[] = [1, 2, 3, 4]; // number数组
  let strArr: string[] = ['a', 'b', 'c']; // string数组
  1. 复合数组类型 当一个数组有多种数据类型时:
  let arr: (number | string)[] = ['a', 'b', 1, 4, 'c']; // 既有number类型,又有string类型的数组
  let arr2: any[] = ['a', 1, null, undefined, {a: 1}]; // 任意类型的数组
  1. 对象数组类型 当一个数组每一项都为一个对象时:
  let xjjArr: { name: string, age: number }[] = [
    { name: "小红", age: 18 },
    { name: "小兰", age: 20 },
  ];

这样定义比较麻烦,可以使用类型别名来简化:

  type Lady = { name: string, age: number }; // 用type来定义类型别名
  let xjjArr: Lady[] = [
    { name: "小红", age: 18 },
    { name: "小兰", age: 20 },
  ];
  1. 类 数组类型
  class Lady {
    name: string;
    age: number;
  }

  let xjjArr: Lady[] = [
    { name: "小红", age: 18 },
    { name: "小兰", age: 20 },
  ];

6、TypeScript的函数参数和返回类型定义

  1. 无返回值 如果一个函数没有返回值的话,我们可以给它加void类型注解,表示没有任何返回值。
  function say(): void{ // 该函数没有返回值
    console.log("hello world"); 
  }
  1. 简单类型 我们可以给函数参数及返回值加上类型注释,提高程序的健壮性。
  function sum(a: number, b: number): number{ // 该函数接收两个number类型的参数,返回一个number类型的值
    return a + b; 
  }

3.参数为对象解构时 当参数为对象解构时,写法会稍微麻烦一些。

  function sum({num1, num2}: {num1: number, num2: number}): number{
    return num1 + num2;
  }
  console.log(sum({num1: 123, num2: 456}));