Можем ли мы создать std :: type_index в TypeScript? - PullRequest
0 голосов
/ 01 мая 2020

В 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 равны

...