Я хотел бы префиксировать все ключи в интерфейсе, используя функцию литерального типа, но мое понимание типов слишком ограничено.
На данный момент я получил следующее:
export type Prefix<K extends string, T extends string> = `${K}${T}`;
export type Prefixer<K, T extends string> = {
[Prefix<P in keyof K>]: K[P];
};
Использование будет:
interface Animals {
fish: any;
}
type SuperAnimals = Prefixer<Animals, 'super'>;
Кто-нибудь может помочь?
Синтаксис для этого, похоже, изменился с момента объявления TS4.1/бета-версии TS4.1.
Работа от
кажется, мы можем:
export type Prefix<K extends string, T extends string> = `${K}${T}`;
export type Prefixer<K, T extends string> = {
[P in keyof K as Prefix<T, string & P>]: K[P];
};
interface Animals {
fish: any;
}
type SuperAnimals = Prefixer<Animals, 'super'>;
Для дополнительного удовольствия вы можете определить Prefix
как
export type Prefix<K extends string, T extends string> = `${K}${Capitalize<T>}`;
в результате появляются такие реквизиты, как superFish
вместо superfish
.
На мой взгляд, это должно работать так: typescriptlang.org/play?ts=4.1.2#code/… но, похоже, вызывает ошибку. Даже пример переназначения клавиш в анонсе 4.1, кажется, приводит к той же проблеме. Хм. devblogs.microsoft.com/typescript/…