返回
从模板字面量类型了解 Typescript 字符串类型的强大之处
前端
2024-02-18 16:53:44
一、模板字面量类型简介
模板字面量类型允许您创建定制的字符串类型,这些类型可以是常量或变量。它们由一对反引号 (``) 包裹,并可以包含任何合法的字符串字符。例如:
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
的条件类型,它可以根据一个类型是否为字符串类型来返回 true
或 false
。
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 中一种强大的特性,它允许创建定制的字符串类型。这些类型可以用于多种目的,包括字符串枚举、函数重载、条件类型和泛型。