【问题标题】:Typescript error : get two type depending on each others打字稿错误:根据彼此获得两种类型
【发布时间】:2023-02-10 20:59:22
【问题描述】:

我必须输入:学校和校园。但是一个学校可以有多个校区,一个校区只能有一个学校。

在我的代码中,我需要操纵其中嵌入了 School 数据的 Campus,或者操纵其中包含 Campuses 数据的嵌入式数组的 School。这就是我实现类型和接口的方式。

    type Campus = {
      zip_code: number;
      address: string;
      name: string;
      [key: string]: string | number;
    };
    
    type School = {
      name: string;
      interests: number;
      contactEmail: string;
      [key: string]: string | number;
    };
    
    interface CampusSchool extends Campus {
      school: School;
    }
    
    interface SchoolCampuses extends School {
      campuses: Campus[] | [];
    }

这给了我错误““学校”类型的“学校”属性不能分配给索引类型“字符串”,“字符串 |数.ts(2411)”。
我尝试了另一种方法来创建 y 接口,基于这个答案:TS 2411 - getting errors property 'propertyName' of type 'string' is not assignable to string index type

    interface CampusSchool extends Campus {
      school: { [schoolData: string]: {
        data: School;
        }
      }
    }

但是,这不起作用,我仍然有错误。另外,我觉得这不是正确的方法,所以我请求你的帮助和建议。预先感谢您的帮助。

【问题讨论】:

标签: typescript


【解决方案1】:

在您的实施中,问题是您试图将“学校”类型的“学校”属性分配给索引类型“字符串 | 数字”。要解决此问题,您可以修改“学校”类型并使用特定类型向其添加“学校”属性:

type Campus = {
  zip_code: number;
  address: string;
  name: string;
};

type School = {
  name: string;
  interests: number;
  contactEmail: string;
  school: CampusSchool;
};

interface CampusSchool extends Campus {
  school: School;
}

interface SchoolCampuses extends School {
  campuses: Campus[] | [];
}

这样,您就没有使用索引类型,错误应该得到解决。

此外,对于 SchoolCampuses 接口,您可以使用 Campus[] 类型定义校园属性。 | []不是必需的,因为Campus[]已经是一个数组类型,所以如果不指定校区,它默认是一个空数组。

【讨论】:

    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 2017-08-24
    • 2021-01-07
    • 2022-12-07
    • 2018-12-17
    • 2020-04-15
    • 2019-02-02
    • 2022-08-06
    相关资源
    最近更新 更多