Typescript Utility Types. Динамическое исключение нескольких полей из типа
export function create<K1>(instance: { new(): K1; } ) {
const ins = new instance();
// свойства exclduefields будет создаваться в @classDecorator которым помечен класс
const fields = excludefields(ins.exclduefields) // например ["map"]
type Result = Omit<K1, ...fields>;
return ins as Result;
}
Использование
@classDecorator
class Test {
map() { return [] }
@decorator
names: any;
@decorator2
fill() { };
}
const test = create(Test);
По сути я хочу создать новый на основе переданного исключая все ключ которые не помечены декораторами.
Я пробывал использовать Omit но там надо заранее прописывать поля которые хочу исключить Я не не могу знать этого заранее
Ответы (1 шт):
Автор решения: EzioMercer
→ Ссылка
Вы описываете структуры, что значит "Я не могу знать этого заранее"? Вы точно должны знать, где что должно искалючаться. С декораторами не подскажу, но в целом если знать в каких местах что будет исключено, то можно прописать все такие типы заранее так:
type SomeType = {
a: string,
b: string,
c: string,
d: string
}
type OmitType1 = {
a: string,
b: string
}
type OmitType2 = {
c: string,
d: string
}
type OmittedType1 = Omit<SomeType, keyof OmitType1>
type OmittedType2 = Omit<SomeType, keyof OmitType2>
const omitted1: OmittedType1 = {
}
const omitted2: OmittedType1 = {
}
Type '{}' is missing the following properties from type 'OmittedType1': c, d
Type '{}' is missing the following properties from type 'OmittedType2': a, b