typescript - 如何从 TypeScript 中的对象数组创建类型?

标签 typescript union-types

给定一个像这样的 countries 数组:

const countries = [
  { name: "Australia", code: "AU" },
  { name: "Japan", code: "JP" },
  { name: "Norway", code: "NO" },
  { name: "Russian Federation", code: "RU" }
];

生成以下类型的最简单方法是什么?

type CountryCodes = "" | "AU" | "JP" | "NO" | "RU";

注意:多了一个空字符串。

最佳答案

虽然这个函数从JS的角度来说是没用的。它能够将代码统一为一种类型。

function createCountries<T extends string>(
  contries: { name: string; code: T }[],
): { name: string; code: T }[] {
  return contries;
}

const countries = createCountries([
  { name: "Australia", code: "AU" },
  { name: "Japan", code: "JP" },
  { name: "Norway", code: "NO" },
  { name: "Russian Federation", code: "RU" }
]);

type CountryCodes = "" | (typeof countries)[number]["code"]; // "" | "AU" | "JP" | "NO" | "RU";

// Example - How to use the type
function getCountryByCode(code: CountryCode): Country | undefined {
  return countries.find(country => country.code == code);
}

国家的类型:

{
    name: string;
    code: "AU" | "JP" | "NO" | "RU";
}[]

没有进一步的信息,这是你能做的最好的...

type Countries = { name: string; code: string }[];

const countriesAbc = [
  { name: "Australia", code: "AU" },
  { name: "Japan", code: "JP" },
  { name: "Norway", code: "NO" },
  { name: "Russian Federation", code: "RU" }
] as const;

const countries: Countries = [...countriesAbc];

type CountryCodes = "" | (typeof countriesAbc)[number]["code"]; // "" | "AU" | "JP" | "NO" | "RU";

关于typescript - 如何从 TypeScript 中的对象数组创建类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66134523/

相关文章:

javascript如何动态地将子字典附加到父字典

build - 具有回退全局的 UMD 语法

reactjs - 将 React forwardRef 与 Typescript 通用 JSX 参数一起使用

scala - 如何定义在运行时工作的联合类型?

typescript - Angular5在项目中导入RxJS时出错

javascript - 边框图像圆锥渐变示例在 React 中不起作用

reactjs - typescript - 如何结合联合和交集类型

sql - Postgres 中的代数数据类型

pointers - 如何创建一个可以在单个单词大小内容纳整数或指针的 Rust 类型?

scala - T 和 List[T] 的类型参数边界