返回

从模板字面量类型了解 Typescript 字符串类型的强大之处

前端

一、模板字面量类型简介

模板字面量类型允许您创建定制的字符串类型,这些类型可以是常量或变量。它们由一对反引号 (``) 包裹,并可以包含任何合法的字符串字符。例如:

type MyString = "Hello World!";

这样就创建了一个名为 MyString 的字符串类型,其值只能是"Hello World!"

二、模板字面量类型的应用

模板字面量类型可以用于多种目的,其中一些常见应用包括:

1. 字符串枚举

模板字面量类型可以用于创建字符串枚举。字符串枚举是一种特殊的枚举类型,其成员的值是字符串。例如:

enum MyEnum {
  A = "A",
  B = "B",
  C = "C",
}

这样就创建了一个名为 MyEnum 的字符串枚举,其成员为 "A""B""C"

2. 函数重载

模板字面量类型可以用于函数重载。函数重载是一种允许一个函数具有多个实现的技术。每个实现都有自己的一组参数类型。例如:

function greet(name: string): string;
function greet(name: MyString): string;

function greet(name: string | MyString): string {
  if (typeof name === "string") {
    return "Hello, " + name;
  } else {
    return "Hello, " + name.value;
  }
}

这样就创建了一个名为 greet 的函数,它可以接受两种不同的参数类型:字符串类型和 MyString 类型。

3. 条件类型

模板字面量类型可以用于条件类型。条件类型是一种允许您根据类型而不是值来创建新类型的技术。例如:

type IsString<T> = T extends string ? true : false;

type MyType = IsString<string>; // true
type MyType2 = IsString<number>; // false

这样就创建了一个名为 IsString 的条件类型,它可以根据一个类型是否为字符串类型来返回 truefalse

4. 泛型

模板字面量类型可以用于泛型。泛型是一种允许您创建通用的类型,这些类型可以用于多种不同类型的值。例如:

function map<T>(array: T[], fn: (item: T) => string): string[] {
  return array.map(fn);
}

const names = ["Alice", "Bob", "Carol"];
const result = map(names, (name) => `Hello, ${name}!`);

这样就创建了一个名为 map 的泛型函数,它可以将一个数组映射到另一个数组。映射函数 fn 可以接受任何类型的参数,并且可以返回任何类型的值。

三、结语

模板字面量类型是 Typescript 中一种强大的特性,它允许创建定制的字符串类型。这些类型可以用于多种目的,包括字符串枚举、函数重载、条件类型和泛型。