Как получить тип класса в typescript?
Есть класс:
class Test {
...
}
Как получить его тип в другом файле?
Пробовал:
1)
export type { Test };
type testType = typeof Test;
export type {testType};
Хочу сделать первым вариантом. Что-то работать не хочет. Со вторым получается, но не "оверхед" ли это?
Ответы (1 шт):
Автор решения: Alexander Lonberg
→ Ссылка
Если конструктор передается в параметры, воспользуйтесь синтаксисом интерфейса
// Предположим у нас универсальный класс
class Foo<T extends string> {
static bar: 1 | 2 | 3 = 1
p: T
constructor(p: T) {
this.p = p
}
getData(): T {
return this.p
}
}
// Объявляем конструктор
interface FooConstructor<T extends string> {
// Тут же можем объявить статические свойства
bar: 1 | 2 | 3
new(p: T): Foo<T>
}
// Используем
function someWithConstructor(c: FooConstructor<'foo' | 'bar'>): void {
// Здесь имеем доступ к статическим свойствам
const n = c.bar // 1 | 2 | 3
const instance = new c('foo')
const data = instance.getData() // return: "foo" | "bar"
}
// А эти варианты смотрите в Playground
function someWithoutConstructor_0(c: typeof Foo<'foo'|'bar'>)): void {
// Error
}
function someWithoutConstructor_1(c: typeof (Foo<'foo' | 'bar'>)): void {
// Error
}
function someWithoutConstructor_2(c: (typeof Foo)<'foo'|'bar'>): void {
// Error
}
Возможно и есть вариант использовать typeof, но я не встречал это в файлах lib.*.d.ts. Смотрите, к примеру, как объявлены конструкторы в "node_modules/typescript/lib/lib.es5.d.ts" для String, строка 517.