使用 OR 符号声明具有 2 种类型的 属性 名称对我不起作用
declare the property name with 2 types using OR notation doesn't work for me
这个解决方案对我不起作用。为什么?
我可以像这样使用 OR 符号声明具有 2 种类型的 属性 名称吗?
export interface OnboardingSchoolModel {
level?: string | number;
school?: string;
}
我已经试过了,但没有用。有什么解决方法吗?
我想限制 属性 的类型,而不是给 any
。
编译时错误:
(property) OnboardingSchoolModel.level?: string | number
Argument of type 'string | number' is not assignable to parameter of type 'string'.
Type 'number' is not assignable to type 'string'.
用法:
getSchools(): Promise<OnboardingSchoolModel[]> {
return new Promise(resolve => {
this.onboardingService.getSchools().pipe(first()).subscribe((schools: any) => {
const schoolList: OnboardingSchoolModel[] = [];
forEach(schools, (s: any) => {
const schoolDocumentData: OnboardingSchoolModel = s.payload.doc.data();
const id: string = s.payload.doc.id;
const school: OnboardingSchoolModel = {
level: this.getIndexForLevel(schoolDocumentData.level),
};
schoolList.push(school);
});
resolve(schoolList);
}, err => console.log(err));
});
}
getIndexForLevel(levelString: string): number {
let levelIndex: number;
switch (levelString) {
case LevelEnum.High_School:
levelIndex = 0;
break;
case LevelEnum.College:
levelIndex = 1;
break;
case LevelEnum.Graduate:
levelIndex = 2;
break;
default:
}
return levelIndex;
}
OP 的反馈
这对我来说非常有用。即 getIndexForLevel(levelString: string | number)
getIndexForLevel(levelString: string | number): number {
let levelIndex: number;
switch (levelString) {
case LevelEnum.High_School:
levelIndex = 0;
break;
case LevelEnum.College:
levelIndex = 1;
break;
case LevelEnum.Graduate:
levelIndex = 2;
break;
default:
}
return levelIndex;
}
原答案:
你的函数 getIndexForLevel() 接受一个字符串作为参数,但你给它字符串或数字,强制它作为字符串。
level: this.getIndexForLevel(schoolDocumentData.level as string),
这个解决方案对我不起作用。为什么?
我可以像这样使用 OR 符号声明具有 2 种类型的 属性 名称吗?
export interface OnboardingSchoolModel {
level?: string | number;
school?: string;
}
我已经试过了,但没有用。有什么解决方法吗?
我想限制 属性 的类型,而不是给 any
。
编译时错误:
(property) OnboardingSchoolModel.level?: string | number
Argument of type 'string | number' is not assignable to parameter of type 'string'.
Type 'number' is not assignable to type 'string'.
用法:
getSchools(): Promise<OnboardingSchoolModel[]> {
return new Promise(resolve => {
this.onboardingService.getSchools().pipe(first()).subscribe((schools: any) => {
const schoolList: OnboardingSchoolModel[] = [];
forEach(schools, (s: any) => {
const schoolDocumentData: OnboardingSchoolModel = s.payload.doc.data();
const id: string = s.payload.doc.id;
const school: OnboardingSchoolModel = {
level: this.getIndexForLevel(schoolDocumentData.level),
};
schoolList.push(school);
});
resolve(schoolList);
}, err => console.log(err));
});
}
getIndexForLevel(levelString: string): number {
let levelIndex: number;
switch (levelString) {
case LevelEnum.High_School:
levelIndex = 0;
break;
case LevelEnum.College:
levelIndex = 1;
break;
case LevelEnum.Graduate:
levelIndex = 2;
break;
default:
}
return levelIndex;
}
OP 的反馈
这对我来说非常有用。即 getIndexForLevel(levelString: string | number)
getIndexForLevel(levelString: string | number): number {
let levelIndex: number;
switch (levelString) {
case LevelEnum.High_School:
levelIndex = 0;
break;
case LevelEnum.College:
levelIndex = 1;
break;
case LevelEnum.Graduate:
levelIndex = 2;
break;
default:
}
return levelIndex;
}
原答案:
你的函数 getIndexForLevel() 接受一个字符串作为参数,但你给它字符串或数字,强制它作为字符串。
level: this.getIndexForLevel(schoolDocumentData.level as string),