联合类型中的类型守卫
// 类型别名
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
函数重载
类中的成员方法重载
接口与类型别名的区别
都可以用来描述对象和函数
与接口类型不一样,类型别名可以用于一些其他的类型(原始类型,联合类型,元祖)
Extend
接口继承类型别名
类型别名继承接口
Implements
泛型
泛型接口
泛型类
泛型工具类
typeof
keyof
泛型约束
Partial
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(); // 正确,直接通过类调用