You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字段多变的REST API取数并进行TypeScript类型定义?

问题解答

一、nativeName的类型定义与取值

类型定义修正

你原来的类型固定了子字段名称(var1/var2),无法适配动态变化的键名。正确做法是用索引签名描述这类键名不固定、值结构统一的对象:

type Country = {
  name: {
    common: string;
    official: string;
    nativeName: {
      // 任意字符串键,对应值都是包含official和common的对象
      [langCode: string]: {
        official: string;
        common: string;
      };
    };
  };
};

也可以用TypeScript内置的Record类型简化,效果完全一致:

type NativeNameEntry = { official: string; common: string };
type Country = {
  name: {
    common: string;
    official: string;
    nativeName: Record<string, NativeNameEntry>;
  };
};

获取第一个nativeName的common值

先提取nativeName的所有值组成数组,再取第一个元素的common属性:

// 假设countries是API返回的数组,类型为Country[]
const firstNativeCommon = Object.values(countries[0].name.nativeName)[0]?.common;

用?.可选链操作符可避免nativeName为空对象时触发报错。

二、languages字段的类型定义

languages是键名动态、值为字符串的结构,直接用索引签名或Record类型即可:

索引签名写法

type Languages = {
  [langCode: string]: string;
};

Record简化写法

type Languages = Record<string, string>;

如果要整合到Country类型中,可标记为可选字段(适配部分国家无语言数据的情况):

type Country = {
  name: { /* ... 原有定义 ... */ };
  languages?: Record<string, string>;
};

内容的提问来源于stack exchange,提问作者badakzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:05:25