type 和 interface 两种形式的改造
来源:9-13 【泛型工厂函数真实应用场景】泛型工厂函数真实价值体现在哪里?

迷你侠
2021-10-14
class Person{
constructor(public name: string, public age: number) {}
}
// type形式:
// 工厂函数类型
type ConstructorType<T> = new (...args: any)=>T
// 创建实例的函数
type CreateInstanceFactoryType<T> = (Constructor: ConstructorType<T>)=>T
// 建Person实例的工厂函数
const personConstructorFactory: CreateInstanceFactoryType<Person> = function(Clazz){
return new Clazz("Mike",21)
}
// 由工厂函数创建Person实例
const person1 = personConstructorFactory(Person)
console.log(person1.name)
// interface形式:
// 工厂函数类型
interface ConstructorInterface<T>{
new (...args: any): T
}
// 创建实例的函数
interface CreateInstanceFactoryInterface<T>{
(constructor: ConstructorInterface<T>): T
}
// 创建Person实例的工厂函数
const personConstructorFactory_1: CreateInstanceFactoryInterface<Person> = function(Clazz){
return new Clazz("Tim",21)
}
// 由工厂函数创建Person实例
const person2 = personConstructorFactory_1(Person)
console.log(person2.name)
写回答
2回答
-
正确,但这个第八章先不用把 new (...args: any)=>T 提取出来,因为只有一个参数,也只要到了一次。到第几章结合 infer 实现 带参数的泛型工厂函数时再提取出来,以减少参数的长度。
// 第九章代码片段。。。。。
function createInstance2<T, CP extends new (...args: any[]) => any>
(constructor: Constructor<T>,
...args: ConstructorParametersType<CP>) {
return new constructor(...args);
}
012021-10-15 -
前端老师傅
2021-12-02
type functionFactory<T> = new (...args: unknown[]) => T interface functionFactory2<T> { new (...args: unknown[]): T } // infer // 工厂函数 [一些不方便【比如说为每一个类对象创建时都打印一句,哪一个类被创建到文件或者直接打印在控制台上或者没有办法直接 new 类名()格式来创建类对象] //function createInstanceFactory(Constructor:new (...arg: any) => any) { function createInstanceFactory<T>(Constructor: functionFactory<T>) { console.log(Constructor.name + '被创建的对象----') return new Constructor('广大银行', '万绿园') } function mycreateInstanceFactory<T>(Constructor: functionFactory2<T>) { console.log(Constructor.name + '被创建的对象----1') return new Constructor('广大银行', '万绿园') } // 使用工厂函数来创建我们的CommercialBank let hhh = createInstanceFactory<CommercialBank>(CommercialBank) let hhh2 = mycreateInstanceFactory<CommercialBank>(CommercialBank)
打个卡,老师讲的很好!!!,点赞
00
相似问题