我想在另一个文件中访问以下类:
export class Person {
constructor() {}
static getDatabaseId(): string {
return '...';
}
}
它是注入的,而不是实际导入的。我想弄清楚它是一个构造函数,并且可以创建 Person 类型的新实例。这是我尝试过的:
let PersonConstructor: {new(): Person};
// inject Person constructor function
beforeEach(inject((_Person_) => {
PersonConstructor = _Person_;
}));
// create a new instance but also access the static variables
const p: Person = new PersonConstructor();
PersonConstructor.getDatabaseId(); // "property does not exist"
编译器不再抱怨要从 Person 实例化新实例,但是当然,现在它也不知道 Person 的静态变量,因为它们已经丢失了在新声明的类型上。
如何正确键入?
答案 0 :(得分:3)
我不确定您的代码的最终目标是什么。从TypeScript文档开始,您可能会使用的一种语法用法是修改类的static
成员并使用新的静态成员创建新实例。
如果您要执行此操作,则正确的代码将如下所示
let PersonConstructor: typeof Person = Person;
// create a new instance but also access the static variables
const p: Person = new PersonConstructor();
PersonConstructor.getDatabaseId(); // Also OK and you my change it. Original Person will not get it changed.
答案 1 :(得分:2)
您可以使用构造函数签名方法,但是您需要添加其他需要访问的成员。
unknownHostException
或者,如果您想使用与import {Person} from './Person';
let PersonConstructor: {
new(): Person
getDatabaseId(): string
} = Person;
// create a new instance but also access the static variables
const p: Person = new PersonConstructor();
PersonConstructor.getDatabaseId(); // "property does not exist"
完全相同的类型(构造函数签名和所有静态变量),则可以只使用typeof Person
:
Person