认识TypeScript

TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。

变量的声明

在ts中定义变量需要指定标识符的类型。
所以完整的声明格式如下:

  • 声明了类型后TypeScript就会进行类型检测,声明的类型可以称之为类型注解
  • var/let/const 标识符:数据类型 = 赋值

    TypeScript数据类型

    number类型

    ```javascript let num: number = 123;

num = 222;

let num1: number = 100; let num2: number = 0b111; let num3: number = 0o456; let num4: number = 0x123ac;

  1. <a name="b1EZM"></a>
  2. ### boolean类型
  3. <a name="kKdYP"></a>
  4. ### string类型
  5. <a name="uibYd"></a>
  6. ### array类型
  7. ```javascript
  8. const names1: Array<string> = [];
  9. const names2: string[] = [];
  10. names1.push("abc");
  11. names2.push("abc");

object类型

null和undefined类型

  1. let n1: null = null;
  2. let n2: undefined = undefined;

symbol类型

  1. const title1 = Symbol("title");
  2. const title2 = Symbol("title");
  3. const info = {
  4. [title1]: "程序员",
  5. [title2]: "老师",
  6. };

any类型

  1. let message: any = "hello world";
  2. message = 123;
  3. message = true;

unkonw类型

  1. function foo() {
  2. return "abc";
  3. }
  4. function bar() {
  5. return 123;
  6. }
  7. let flag = true;
  8. let result: unknown;
  9. if (flag) {
  10. result = foo();
  11. } else {
  12. result = bar();
  13. }

void类型

  1. function sum(num1: number, num2: number) {
  2. console.log(num1 + num2);
  3. }
  4. sum(20, 30);

never类型

  1. function handleMessage(message: string | number | boolean) {
  2. switch (typeof message) {
  3. case "string":
  4. console.log("string处理方式");
  5. break;
  6. case "number":
  7. console.log("number处理方式");
  8. break;
  9. case "boolean":
  10. console.log("boolean处理方式");
  11. break;
  12. default:
  13. const check: never = message;
  14. }
  15. }
  16. handleMessage("abc");
  17. handleMessage(123);
  18. handleMessage(true);

tuple类型

  1. const info: [string, number, number] = ["why", 18, 1.88];
  2. const name = info[0];
  3. console.log(name.length);
  4. const age = info[1];

类型断言as

有时候TypeScript无法获取具体的类型信息,这个我们需要使用类型断言(Type Assertions)。

  • 比如我们通过 document.getElementById,TypeScript只知道该函数会返回 HTMLElement,但并不知道它具体的类型:

    案例一:

    ```javascript const el = document.getElementById(“why”); // 如果这里的why是TypeScript - 图1标签 el.src = “”; // 这个时候调用el.src方法会报错,因为Ts只能识别出el是HTMLElement

const el = document.getElementById(“why”) as HTMLImageElement; // 通过类型断言 el.src = “”; // 这个时候Ts就知道el是HTMLImageElement,调用el.src就不会报错

  1. <a name="kstGc"></a>
  2. ### 案例二:
  3. ```javascript
  4. class Person {}
  5. class Student extends Person {
  6. studying() {}
  7. }
  8. function sayHello(p: Person) {
  9. (p as Student).studying(); // 如果直接调用p.studying会因为Person类型没有该方法而报错
  10. }
  11. const stu = new Student();
  12. sayHello(stu);

TypeScript函数

TypeScript类

TypeScript接口

TypeScript泛型