ts 重点语法

132 阅读2分钟

联合类型中的类型守卫

// 类型别名
type Vehicle = Motorcycle | Car | Truck;
// bad
const EVALUATION_FACTOR = Math.PI; 
function evaluatePrice(vehicle: Vehicle) {
  return vehicle.capacity * EVALUATION_FACTOR;
}
const myTruck: Truck = { vType: "truck", capacity: 9.5 };
evaluatePrice(myTruck);
//good
function evaluatePrice(vehicle: Vehicle) {
  switch(vehicle.vType) {
    case "car":
      return vehicle.transmission * EVALUATION_FACTOR;
    case "truck":
      return vehicle.capacity * EVALUATION_FACTOR;
    case "motorcycle":
      return vehicle.make * EVALUATION_FACTOR;
  }
}

交叉类型

type PartialPointX = { x: number; };
type Point = PartialPointX & { y: number; };

let point: Point = {
  x: 1,
  y: 1
}

函数

函数类型的作用

// 函数表达式(作用一)
// 定义一个函数类型 
type AddFunction = (a: number, b: number) => number; 
// 实现该类型的函数 
const add: AddFunction = (a, b) => { return a + b; }; 
// 调用函数 const result = add(1, 2); console.log(result); // 输出: 3

// 使用函数类型作为接口成员
interface MathOperations { add: (x: number, y: number) => number; subtract: (x: number, y: number) => number; } 
// 实现接口 const mathOps: MathOperations = { add: (x, y) => x + y, subtract: (x, y) => x - y, }; console.log(mathOps.add(5, 3)); 
 // 输出: 8 console.log(mathOps.subtract(5, 3)); // 输出: 2

可选参数与默认参数

// 可选参数
function createUserId(name: string, id: number, age?: number): string {
  return name + id;
}

// 默认参数
function createUserId(
  name: string = "semlinker",
  id: number,
  age?: number
): string {
  return name + id;
}

剩余参数定义类型

function sumNumbers(...numbers: number[]): number 
    { return numbers.reduce((total, num) => total + num, 0)
} 
// 调用函数 console.log(sumNumbers(1, 2, 3, 4)); // 输出: 10

函数重载

image.png

类中的成员方法重载

image.png

接口与类型别名的区别

都可以用来描述对象和函数

image.png image.png

与接口类型不一样,类型别名可以用于一些其他的类型(原始类型,联合类型,元祖)

image.png

Extend
接口继承类型别名

image.png

类型别名继承接口

image.png

Implements

image.png

泛型

泛型接口

image.png

泛型类

image.png

泛型工具类

typeof

image.png

keyof

image.png

泛型约束

image.png

Partial

image.png

js类与ts类的区别

区别一

ts类多了修饰符 private proProtected public 
const base = new BaseClass(); 
console.log(base.publicMember); // 可以访问 console.log(base.protectedMember); // 错误,因为protected成员不能在类的外部访问 // 
console.log(base.privateMember); 
// 错误,因为private成员不能在类的外部访问

区别二

-   **JavaScript**:不支持接口(Interface)这一概念,因此没有直接的方式强制类遵循特定的结构或实现特定的方法。
-   **TypeScript**:支持接口,允许你定义一个蓝图,规定类必须具有的属性和方法,从而实现接口的约束和代码的复用。

js与ts静态属性得作用

JavaScript中的static关键字
class MyClass { 
  static myStaticMethod() { console.log('This is a static method.')}
} 
MyClass.myStaticMethod(); // 正确,直接通过类调用