gpt4 book ai didi

typescript - 如何迭代 typescript 字符串文字?

转载 作者:行者123 更新时间:2023-12-05 08:50:55 28 4
gpt4 key购买 nike

我有这个文字类型 export type names = 'n1' | 'n2' | 'n3' | 'n4' | 'n5' | 'n6';

我想知道您将如何迭代该类型?

也许您可以将该类型转换为其他类型并对其进行迭代?

是否应该以不同的方式重新定义类型?

names.forEach(value => {
console.log(value);
});

最佳答案

简答

你可以将它定义为一个 const 和这样的类型:

const names = ['n1' , 'n2' , 'n3' , 'n4' , 'n5' , 'n6'] as const;

// This produces the union type 'n1' | 'n2' | 'n3' | 'n4' | 'n5' | 'n6';
type names = typeof names[number];

// use names as a type here
const n1: names = 'n1';

console.log({
names,
n1,
// use names as an array here
mapped: names.map(name => `I am ${name}`)
});

讲解和演示

这是怎么回事?

as const 创建一个带有 const context 的数组.这意味着该数组不是 string 数组,而是特定字符串文字值的只读数组。

然后,typeof names[number] 使用 indexed access operator将这些字符串文字值提取到联合类型中。

如果我们不使用 as const 来定义我们的数组,那么 typeof names[number] 会给我们 string 类型而不是数组的字符串文字值的并集。

最终结果非常整洁。我们可以将 names 用作类型检查的联合类型,并在运行时用作数组。

在这里is in the playground ,这里是 JavaScript 中的 playground 输出:

"use strict";
const names = ['n1', 'n2', 'n3', 'n4', 'n5', 'n6'];
const n1 = 'n1';
console.log({
names,
n1,
mapped: names.map(name => `I am ${name}`)
});

警告:使用 names 作为联合类型和数组值会引发有关命名约定的问题。通常类型是 PascalCased(例如 Names),值是 camelCased(例如 names)。我们应该遵循哪些命名约定?

为了完整起见,下面是它在 VS Code 中跨两个文件的样子:

enter image description here

关于typescript - 如何迭代 typescript 字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60962311/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com