[英]Typescript: having “n” times of a property with dynamic name
I have a class that i want to have type checking on it我有一个课程,我想对其进行类型检查
here is the code for it:这是它的代码:
class FlightFilter implements Filter {
get filters() {
return {
departTime: { name: 'زمان رفت', type: FilterTypes.Range },
price: { name: 'بازه قیمتی', type: FilterTypes.Range },
flightType: { name: 'نوع پرواز', type: FilterTypes.CheckboxList },
flightClass: { name: 'کلاس پروازی', type: FilterTypes.CheckboxList },
airline: { name: 'شرکت هواپیمایی', type: FilterTypes.CheckboxList },
airports: { name: 'فرودگاه ها', type: FilterTypes.CheckboxList }
};
}
fillData() {
for (const filter of this.filters) {
console.log(filter);
}
}
departTime(ticket) {
return true;
}
departTimeDataGenerator() {}
departTimeModel = null;
price(ticket) {
return true;
}
priceDataGenerator() {}
priceModel = null;
flightType(ticket) {
return true;
}
flightTypeDataGenerator() {}
flightTypeModel = null;
flightClass(ticket) {
return true;
}
flightClassDataGenerator() {}
flightClassModel = null;
airline(ticket) {
return true;
}
airlineDataGenerator() {}
airlineModel = null;
airports(ticket) {
return true;
}
airportsDataGenerator() {}
airportsModel = null;
}
I tried to make an interface for it but I don't know how to have "n" times of a property with a dynamic name我试图为它制作一个接口,但我不知道如何让一个具有动态名称的属性“n”次
something like this:像这样:
interface Filter {
filters(): Object;
fillData(): void;
// Here is the part that i want multiple of
[name: String](ticket: Object): Boolean;
[name: String]DataGenerator(): void;
[name: String]Model: any
}
bare in mind that I have the above code from my javascript project and I want to switch to typescript请记住,我有来自我的 javascript 项目的上述代码,我想切换到打字稿
thanks to "BobobUnicorn" in typescript's discord community I now have an answer感谢打字稿不和谐社区中的“BobobUnicorn”,我现在有了答案
this is brilliant!这太棒了!
type Filter<T extends { filters: unknown }> = {
filters: T['filters'];
fillData(): void;
} & {
[K in keyof T['filters']]: (ticket: unknown) => boolean;
} & {
[K in keyof T['filters']as `${K & string}DataGenerator`]: () => void;
} & {
[K in keyof T['filters']as `${K & string}Model`]: any;
}
enum FilterTypes {
Range = 1,
CheckboxList = 2
}
class FlightFilter implements Filter<FlightFilter> {
get filters() {
return {
departTime: { name: 'زمان رفت', type: FilterTypes.Range },
price: { name: 'بازه قیمتی', type: FilterTypes.Range },
flightType: { name: 'نوع پرواز', type: FilterTypes.CheckboxList },
flightClass: { name: 'کلاس پروازی', type: FilterTypes.CheckboxList },
airline: { name: 'شرکت هواپیمایی', type: FilterTypes.CheckboxList },
};
}
fillData() {
// for (const filter of this.filters) {
// console.log(filter);
// }
}
departTime(ticket: any) {
return true;
}
departTimeDataGenerator() { }
departTimeModel = null;
price(ticket: any) {
return true;
}
priceDataGenerator() { }
priceModel = null;
flightType(ticket: any) {
return true;
}
flightTypeDataGenerator() { }
flightTypeModel = null;
flightClass(ticket: any) {
return true;
}
flightClassDataGenerator() { }
flightClassModel = null;
airline(ticket: any) {
return true;
}
airlineDataGenerator() { }
airlineModel = null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.