TypeScript 如何使用 Record 类型

TypeScript 如何使用 Record 类型

TypeScript 中,Record 类型是一个强大的工具,允许你定义具有特定键和相应值类型的对象类型。本教程将引导你了解使用 Record 类型的基础知识,提供语法说明和实际示例。无论你是初学者还是已经熟悉 TypeScript,本教程都将帮助你有效地利用 Record 类型在你的项目中。

语法

在 TypeScript 中创建 Record 类型的语法很简单。类型定义以关键字 Record 开始,后面是尖括号(<>),其中包含在大括号({})中括起来的键和值类型。以下是一个示例,以说明语法:

type MyRecord = Record<string, number>;

在这里,我们将MyRecord定义为一个具有字符串键和数字值的Record类型。现在,让我们深入研究Record类型在不同场景下的用法。

示例1:定义一个字典

Record类型的一种常见用法是创建具有特定键值对的字典。当您需要组织数据或通过相应的键访问值时,这非常有帮助。在此代码片段中,我们将AnimalAges定义为一个具有字符串键和数字值的Record类型。ages对象代表我们的字典,其中动物名称作为键,它们相应的年龄作为值。我们可以使用点表示法访问值,如console.log语句所示。

type AnimalAges = Record<string, number>;
const ages: AnimalAges = {
   dog: 5,
   cat: 3,
   rabbit: 2,
};
console.log(ages.dog);
console.log(ages.cat);

在编译时,它将生成以下JavaScript代码−

var ages = {
   dog: 5,
   cat: 3,
   rabbit: 2
};
console.log(ages.dog);
console.log(ages.cat);

输出

以上代码将产生以下输出−

5
3

示例2:保留关键类型

Record类型是灵活的,允许您保留特定的关键类型,如字面类型。当在一个对象中强制执行严格的关键名时,这是有用的。在这个例子中,我们将FruitColors定义为一个联合类型,表示不同的水果名称。然后,我们使用Record类型创建一个ColorsRecord,将水果名称作为关键字,用表示它们相应颜色的字符串值来表示。通过利用字面类型,我们确保只有有效的水果名称可以用作颜色对象的关键字。

const colors: ColorsRecord = {
   apple: 'red',
   banana: 'yellow',
   orange: 'orange',
};

console.log(colors.apple); 
console.log(colors.banana);

编译后,将生成以下的JavaScript代码:

var colors = {
   apple: 'red',
   banana: 'yellow',
   orange: 'orange'
};
console.log(colors.apple);
console.log(colors.banana);

输出

以上代码将产生以下输出−

red
yellow

示例3:映射和转换值

Record类型还可以用于映射和转换对象中的值。假设我们有一个学生姓名列表,并且希望使用Record类型将它们转换为大写。在这个示例中,我们将StudentNames定义为一个具有特定键表示学生姓名的对象类型。然后,我们使用Record类型创建UppercaseNames,确保其键与StudentNames中的键相同。通过利用toUpperCase()方法,我们将姓名转换为大写并将它们赋值给uppercaseStudents对象中的相应键。

type StudentNames = {
   alice: string;
   bob: string;
   charlie: string;
};

type UppercaseNames = Record<keyof StudentNames, string>;

const students: StudentNames = {
   alice: 'Alice',
   bob: 'Bob',
   charlie: 'Charlie',
};

const uppercaseStudents: UppercaseNames = {
   alice: students.alice.toUpperCase(),
   bob: students.bob.toUpperCase(),
   charlie: students.charlie.toUpperCase(),
};

console.log(uppercaseStudents);

在编译时,将生成以下JavaScript代码 –

var students = {
   alice: 'Alice',
   bob: 'Bob',
   charlie: 'Charlie'
};
var uppercaseStudents = {
   alice: students.alice.toUpperCase(),
   bob: students.bob.toUpperCase(),
   charlie: students.charlie.toUpperCase()
};
console.log(uppercaseStudents);

输出

上述代码将产生以下输出 –

{ alice: 'ALICE', bob: 'BOB', charlie: 'CHARLIE' }

示例4:处理动态对象键

记录类型在处理具有动态键的对象时特别有用。考虑一个场景,在这个场景中,我们想要统计一个句子中单词的出现次数。在这个示例中,我们定义了countWords函数,该函数将一个句子作为输入,并返回一个记录类型,其中键表示句子中的唯一单词,值表示每个单词的出现频率。通过将句子拆分为一个单词数组,并对每个单词进行迭代,我们相应地更新wordCount对象中的计数。

function countWords(sentence: string): Record<string, number> {
   const words: string[] = sentence.split(' ');
   const wordCount: Record<string, number> = {};

   words.forEach((word) =< {
      if (wordCount[word]) {
         wordCount[word]++;
      } else {
         wordCount[word] = 1;
      }
   });

   return wordCount;
}

const sentence = 'This is a sentence. This sentence contains multiple words.';
const wordCount = countWords(sentence);

console.log(wordCount);

编译时,它将生成以下JavaScript代码−

function countWords(sentence) {
   var words = sentence.split(' ');
   var wordCount = {};
   words.forEach(function (word) {
      if (wordCount[word]) {
         wordCount[word]++;
      }
      else {
         wordCount[word] = 1;
      }
   });
   return wordCount;
}
var sentence = 'This is a sentence. This sentence contains multiple words.';
var wordCount = countWords(sentence);
console.log(wordCount);

输出

上述代码将产生以下输出结果 –

{
   This: 2,
   is: 1,
   a: 1,
   'sentence.': 1,
   sentence: 1,
   contains: 1,
   multiple: 1,
   'words.': 1
}

结论

在TypeScript中,Record类型为我们提供了一种方便的方式来定义带有特定键值对的对象。无论您是创建字典还是保留键类型,Record类型都提供了灵活性和类型安全性。通过了解语法并探索各种情景,您可以利用Record类型的力量编写更具表达性和无错误的代码。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

TypeScript 精选笔记