Open dave-wind opened 1 year ago
抽象类 一般用作于 抽象类的属性和方法 只能用作于继承 去限制子类; 不用用于new; 用关键字 abstract 实现
abstract class Student { private name: string // 保护的属性 一般只能在内部使用 子类不可使用 private age: number public constructor(name: string, age: number) { this.name = name; this.age = age; } public get getName(): string { return this.name } }
class ManStudent extends Student { constructor(name: string, age: number) { super(name, age) } }
Partial 是一个工具类型,它的作用是将某个接口的所有属性变为可选。这在我们需要实现一个接口的部分属性更新时非常有用
1.为什么要使用 Partial? 因为要申明一个新的类型时候,我有100个属性,通过Partial 变成可选,赋值的时候不需要100属性全部赋值 // 定义一个接口 interface Person { name: string; age: number; address: string; } type PartialPerson = Partial<Person>
// 创建一个实现 PartialPerson 的对象 const partialPerson: PartialPerson = { name: "John", }; // 更新一个 Person 对象的部分属性 function updatePerson(person: Person, partialPerson: PartialPerson): Person { return { ...person, ...partialPerson }; }
const person: Person = { name: "Jane", age: 30, address: "123 Main St", };
const updatedPerson = updatePerson(person, partialPerson); console.log(updatedPerson); // 输出: { name: 'John', age: 30, address: '123 Main St' }
它可以从一个接口或类型中移除指定的属性,返回一个新的类型
语法: type NewType = Omit<OriginalType, 'Property1' | 'Property2'> 栗子: interface User { id: number; name: string; age: number; email: string; } 现在我们想从 User 类型中移除 email 属性,可以使用 Omit 工具类型: type UserWithoutEmail = Omit<User, 'email'>;
interface UserWithoutEmail { id: number; name: string; age: number; } 使用场景:
含义:
Omit 类型本质上是一个新的类型,它从原始类型中移除了指定的属性,并返回一个新的类型。这个新类型可以被用来代替原始类型,以实现更灵活的数据结构。
从某个类型中选取指定属性组成一个新的类型
interface PersonNameAndAge { name: string; age: number; } ype PersonNameAndAge = Pick<Person, 'name' | 'age'>;
// 等价于
interface PersonNameAndAge { name: string; age: number; } 使用场景:当我们需要从一个大型的对象中选取部分属性时,可以使用 Pick 来定义。
根据一个键类型和一个值类型,创建一个新的类型,该类型的键为键类型,值为值类型。
type Weekday = 'Monday' | 'Tuesday' | 'Wednesday' | 'Thursday' | 'Friday'; type WorkHours = Record<Weekday, string>; // 等价于
interface WorkHours { Monday: string; Tuesday: string; Wednesday: string; Thursday: string; Friday: string; } 使用场景:当我们需要创建一个从键到值的映射时,可以使用 Record 来定义。
泛型
function identity(arg: T): T {
return arg;
}
// 泛型 自动 类型推断 identity('sth')
identity('sth')
// 加个length
function identity2(arg: T[]): number {
console.log(arg.length)
return arg.length
}
// 赋值变量1 const demo:(arg: T[]) => number = identity2
// 赋值变量2 const demo2: {(arg: T[]): number } = identity2
// 赋值变量3 const demo3 = identity2
// 接口
interface GenericIdentityFn {