简介

  1. ts 是由微软开发的开源编程语言
  2. ts 是 js 的超集
  3. ts 是开发大型应用的基石
  4. ts 提供了更丰富的语法提示
  5. ts 在编写阶段能够检查错误

    数据类型

    js 数据类型

    • 原始数据类型: boolean string number null undefined symbol
    • 引用数据类型: object

ts 类型注解

  1. // 字符串类性注解
  2. let myName: string = "hao";
  3. // 数字类性注解
  4. let num: number = 123;
  5. // 布尔类性注解
  6. let bool: boolean = true;
  7. // any类性注解 (能不用尽量不用)
  8. // 1. 可以是任意数据类型
  9. // 2. 如果是对象的话,any是不会提示原有的属性和方法
  10. // 3. 未被初始值的变量类型就是 any
  11. let notSure = 333; // 默认 -> let notSure: any = 333;
  12. // isOk ↓
  13. notSure = "maybe a string instead";
  14. notSure = false;
  15. // void(无任何类型) 在某种程度上与 any 相反 (一般自会用在函数的返回值为空时)
  16. function fn (): void {
  17. console.log("我没有任何返回值哦");
  18. return undefined; // -> 返回undefined也可以 因为函数无返回值是默认返回undefined;
  19. }
  20. //never 表示是那些永远不存在的值的类型
  21. function error (msg: string): never {
  22. throw new Error(msg);
  23. }
  24. function infinteloop(): never {
  25. while(true) {
  26. };
  27. }
  28. // --------------原始类型↑----------------
  29. // object -> 表示非原始类型
  30. let obj: object | null;
  31. // all ok ↓
  32. obj = {a: 1};
  33. obj = null;
  34. obj = [];
  35. obj = () => {};
  36. // all wrong ↓
  37. obj = undefined;
  38. obj = false;
  39. obj = "1";
  40. obj = 2;

ts 类型推断

  1. let count = 0; // ts能够正确推断出count: number;
  2. let addFn = (a, b) => { // ts这里就不能推断出函数参数的类型 需要手中注解 a: number, b: number
  3. return a + b;
  4. };
  5. addFn(1, 2);

ts 类型断言
有时候你可能比 ts 更清楚某个值的类型信息,你就可以进行类型断言。
有两种语法 一种是 as 语法, 另一种是<类型>语法。

  1. let someVal: any = "hihihi~";
  2. let length: number = (someVal as string).length;
  3. let length: number = (<string>someVal).length;

联合类型

多个类型当中我们可以选择其中类型的一种即可。
注意:

  1. 联合类型的共有属性是不会报错的。
  2. 在赋值之后就会确定类型。
    1. let a = number | string;
    2. a = 123; // ok
    3. a = "123"; // ok

    ts 静态类型 、js 动态类型

  • ts

    1. let a: string = "123";
    2. a = 123 // -> 提示 不能将类型123分配给类型"string"
    3. console.log(a);
  • js

    1. let a = "123";
    2. a = 123;
    3. console.log(a); // -> 123

    接口 interface

  1. 对象的形状进行描述
  2. 对类的一部分行为的抽象 ```typescript interface Person { // 不可多,也不可少 readonly id: number; // -> 只读属性 name: string; // -> 必有属性 age?: number; // -> 可选属性 [propName: string]: any // 任意属性(固定写法) 类型必须为any }

let person: Person { id: 001, name: “xiaoA”, age: 22, // 这个属性可以没有 sex: “male” }

person.id = 002; // -> 报错

  1. <a name="j2FyF"></a>
  2. ## 数组
  3. 1. 类型 `let list: number[] = [1, 2, 3]`
  4. **注:没有长度限制,push 非类型的数据是不可以的。**
  5. 2. 泛型 `let list Array<number> = [1, 2, 3]`
  6. 2. interface 方式
  7. ```typescript
  8. interface NumList {
  9. [index: number]: number
  10. }
  11. let list: NumList = [1, 2, 3]; // -> ok
  12. // 类数组
  13. interface Args {
  14. [index: number]: any;
  15. length: number;
  16. callee: Function;
  17. }
  18. function fn() {
  19. // IArguments 结构就是 Args 的结构
  20. let args: IArguments = arguments;
  21. }
  22. fn(1);

函数

声明函数

  1. function test (a: number, b: number): number {
  2. return a + b;
  3. }
  4. test(1, 2);

表达式函数

  1. let test = function (a: number, b: number): number {
  2. return a + b;
  3. }
  4. //--------[ 这里就是函数的注解 ]----------------
  5. let test: (a: number, b: number) => number = function (a, b) {
  6. return a + b;
  7. }
  1. 可选参数、 默认值<br />**注: 默认值、收集多余参数一定是放到最后面才可以**
  1. // 可选参数
  2. function fullName (firstName: string, LastName?: string): string {
  3. return firstName + " " + LastName;
  4. }
  5. // all ok ↓
  6. fullName("troye", "siven");
  7. fullName("troye");
  8. // 默认值
  9. let buildName (firstName: stirng, LastName = "orz"): string {
  10. return firstName + " " + LastName;
  11. }
  12. buildName("Tommy", "shelby");
  13. buildName("XD");
  14. // 剩余参数
  15. let longName (firstName: stirng, secondName: string, ...restName: string[]): string {
  16. return firstName + " " + secondName + " " + restName.join(" ");
  17. }

重载

  1. // 表意会更清晰
  2. function reverse (x: string): string;
  3. function reverse (x: number): number;
  4. function reverse (x: string | number) {
  5. if (typeof x === "string") {
  6. return x.split("").reverse().join("");
  7. }
  8. if (typeof x === "number") {
  9. return Number(x.toString().split("").reverse().join(""));
  10. }
  11. }
  12. console.log(reverse("123"));
  13. console.log(reverse(123));