В C ++ есть хороший std :: type_index , который преобразует типы в значение, которое можно сохранить на карте или для проверки на равенство или аналогичные вещи, например:
std::unordered_map<std::type_index, std::vector<void *>> instances;
class A { /* stuff... */ };
class B { /* stuff... */ };
template <typename Type>
void insert(Type *type) {
type_names[std::type_index(typeid(Type))].push_back(&type);
}
insert<A>(new A());
insert<B>(new B());
Есть ли способ сделать то же самое в TypeScript? Возможное решение может выглядеть следующим образом:
const instances: Record<string, any[]> = {};
function insert<T>(inst: T): T {
const tid: string = ???;
if (!instances[tid]) {
instances[tid] = [];
}
instances[tid].push(inst);
}
В более формальном смысле я хотел бы функцию type_index<T>(): string
такую, что type_index<A>() === type_index<B>()
тогда и только тогда, когда типы A и B равны