{
const NAME: &str;
}
Т.е. ассоциировать с типом компайл-тайм строку? Пока я придумал вот такое:
export interface HasName<N extends string> {}
export type GetName<T> = T extends HasName<infer N> ? N : never
Но вытащить string из T не получается
Привет. Я вот так делаю: export type HasName<T extends object> = T & {name: string}
Мне нужно, чтобы возможно было составить функцию с типом <T extends HasName>() => string У тебя ведь тип HasName значит "все представители HasName<T> имеют поле name типа string — это другое. Тут у каждого представителя будет свой name. А мне нужно, чтобы у типа был name
Я правильно понимаю, тебе нужно в рантайме получить строку, ассоциированную с типом?
Получить в компайл-тайме, использовать в рантайме
Т.к. типов в рантайме не существует и ты хочешь использовать эту строку, её придётся хранить в каком-то свойстве объекта.
В Расте тоже типов в рантайме нет. Эта строка - свойство типа. Ей не нужно быть свойством объекта
TS перед исполнением преобразуется в JS, все типы при этом отбрасываются => этой строки не окажется в коде, если её не положить в свойство.
Почему бы её не инлайнить/записывать в глобальную константу?
Компилятор TS этого не сделает, поэтому какой бы механизм ассоциации строки с объектами ты ни выбрал, это придётся делать руками.
Грустно
Обсуждают сегодня