TypeScript 泛型创建实例
TypeScript generics create instace
我正在尝试创建一个工厂以使用泛型实例化我的 classes。检查 TypeScript docs 一切正常。简而言之,这很好用:
class Person {
firstName = 'John';
lastName = 'Doe';
}
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(Person);
console.log(JSON.stringify(person));
现在在directory
中定义class个人:
export class Person extends BasePerson {
firstName = 'John';
lastName = 'Doe';
}
当我从其他包导入 Person
时:
import { Person } from "./directory"
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(Person);
我收到错误:
Argument of type 'typeof Person' is not assignable to parameter of type 'new () => Person'
如何获得 Person
而不是 typeof Person
的值?
使用 TypeScript 3.7.2 和 Node v10.13.0。
你能帮我试试这个吗?
import { Person } from "./directory"
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(new Person);
这里的实际问题是 Person
的父 class -> BasePerson
。 BasePerson
期望其构造函数中有一个参数,因此当我尝试调用 factory.create(Person)
时,Person
实际上是一个 typeof
因为它期望基 class 构造函数有一个参数.通过删除基础 class 中的构造函数并通过 ioc 容器注入 属性 来解决问题,在我的例子中是 Inversify。
我正在尝试创建一个工厂以使用泛型实例化我的 classes。检查 TypeScript docs 一切正常。简而言之,这很好用:
class Person {
firstName = 'John';
lastName = 'Doe';
}
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(Person);
console.log(JSON.stringify(person));
现在在directory
中定义class个人:
export class Person extends BasePerson {
firstName = 'John';
lastName = 'Doe';
}
当我从其他包导入 Person
时:
import { Person } from "./directory"
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(Person);
我收到错误:
Argument of type 'typeof Person' is not assignable to parameter of type 'new () => Person'
如何获得 Person
而不是 typeof Person
的值?
使用 TypeScript 3.7.2 和 Node v10.13.0。
你能帮我试试这个吗?
import { Person } from "./directory"
class Factory {
create<T>(type: (new () => T)): T {
return new type();
}
}
let factory = new Factory();
let person = factory.create(new Person);
这里的实际问题是 Person
的父 class -> BasePerson
。 BasePerson
期望其构造函数中有一个参数,因此当我尝试调用 factory.create(Person)
时,Person
实际上是一个 typeof
因为它期望基 class 构造函数有一个参数.通过删除基础 class 中的构造函数并通过 ioc 容器注入 属性 来解决问题,在我的例子中是 Inversify。