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

给定一个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);
}

类型countries

{
    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中的对象数组创建类型?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>