В настоящее время я пишу фабрику классов в TypeScript и хотел бы вернуть тип в качестве вывода функции. Хотя TypeScript обрабатывает типы в качестве входных данных - т.е. дженерики - прекрасно, я еще не нашел способ обработки типов в качестве вывода.
Этот вопрос StackOverflow на фабриках классов предложил особенно полезное решение, но не полностью ответил на мой вопрос. Учитывая приведенную ниже структуру,
function factory(someVar: any) {
return class A {
// Do something with someVar that makes this class unique
}
}
вопрос предполагает, что с выходом из этой фабричной функции следует сделать следующее:
import factory from "someLocation";
const AClass = factory({foo: "bar"});
type A = InstanceType<typeof AClass>;
interface IData {
someField: A;
}
Мне было бы интересно включить эту функцию в мою заводскую функцию, чтобы сделать систему более многоразовой или модульной. Тем не менее, как изначально указывалось, я не уверен, как вернуть тип из функции. Если я попытаюсь сделать следующее, TypeScript выдаст ошибку, [ts] 'MenuState' only refers to a type, but is being used as a value here. [2693]
:
function factory(someVar: any) {
class AClass {
// Do something with someVar that makes this class unique
}
type A = InstanceType<typeof AClass>;
return A;
}
Как я могу пойти по этому поводу? В общем, существует ли какой-либо семантически правильный способ обработки типов как значений или переменных? Если нет, то почему это противоречит лучшей практике в TypeScript? Кроме того, как можно использовать этот тип в качестве конструктора, если это возможно?