我有一个类,我想对其进行类型检查
这是它的代码:
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;
}
我试图为它制作一个接口,但我不知道如何让一个具有动态名称的属性“n”次
像这样:
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
}
请记住,我的 javascript 项目中有上述代码,我想切换到打字稿
答案 0 :(得分:0)
感谢 typescript 不和谐社区中的“BobobUnicorn”,我现在有了答案
这太棒了!
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;
}