使用 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),