- TypeScript 基础
- TypeScript - 首页
- TypeScript - 路线图
- TypeScript - 概述
- TypeScript - 环境设置
- TypeScript - 基本语法
- TypeScript vs. JavaScript
- TypeScript - 特性
- TypeScript - 变量
- TypeScript - let & const
- TypeScript - 运算符
- TypeScript 基本类型
- TypeScript - 类型
- TypeScript - 类型注解
- TypeScript - 类型推断
- TypeScript - 数字
- TypeScript - 字符串
- TypeScript - 布尔值
- TypeScript - 数组
- TypeScript - 元组
- TypeScript - 枚举
- TypeScript - any
- TypeScript - never
- TypeScript - 联合类型
- TypeScript - 字面量类型
- TypeScript - 符号
- TypeScript - null vs. undefined
- TypeScript - 类型别名
- TypeScript 控制流
- TypeScript - 决策
- TypeScript - if 语句
- TypeScript - if else 语句
- TypeScript - 嵌套 if 语句
- TypeScript - switch 语句
- TypeScript - 循环
- TypeScript - for 循环
- TypeScript - while 循环
- TypeScript - do while 循环
- TypeScript 函数
- TypeScript - 函数
- TypeScript - 函数类型
- TypeScript - 可选参数
- TypeScript - 默认参数
- TypeScript - 匿名函数
- TypeScript - 函数构造器
- TypeScript - rest 参数
- TypeScript - 参数解构
- TypeScript - 箭头函数
- TypeScript 接口
- TypeScript - 接口
- TypeScript - 接口扩展
- TypeScript 类和对象
- TypeScript - 类
- TypeScript - 对象
- TypeScript - 访问修饰符
- TypeScript - 只读属性
- TypeScript - 继承
- TypeScript - 静态方法和属性
- TypeScript - 抽象类
- TypeScript - 访问器
- TypeScript - 鸭子类型
- TypeScript 高级类型
- TypeScript - 交叉类型
- TypeScript - 类型保护
- TypeScript - 类型断言
- TypeScript 类型操作
- TypeScript - 从类型创建类型
- TypeScript - Keyof 类型运算符
- TypeScript - Typeof 类型运算符
- TypeScript - 索引访问类型
- TypeScript - 条件类型
- TypeScript - 映射类型
- TypeScript - 模板字面量类型
- TypeScript 泛型
- TypeScript - 泛型
- TypeScript - 泛型约束
- TypeScript - 泛型接口
- TypeScript - 泛型类
- TypeScript 其他
- TypeScript - 三斜杠指令
- TypeScript - 命名空间
- TypeScript - 模块
- TypeScript - 环境声明
- TypeScript - 装饰器
- TypeScript - 类型兼容性
- TypeScript - Date 对象
- TypeScript - 迭代器和生成器
- TypeScript - Mixin
- TypeScript - 实用程序类型
- TypeScript - 装箱和拆箱
- TypeScript - tsconfig.json
- 从 JavaScript 到 TypeScript
- TypeScript 有用资源
- TypeScript - 快速指南
- TypeScript - 有用资源
- TypeScript - 讨论
TypeScript - 模板字面量类型
模板字符串字面量用于在 JavaScript 中创建包含变量的动态字符串。类似地,在 TypeScript 中,您可以使用模板字面量类型来创建动态类型,这是在 TypeScript 4.1 版本中引入的。TypeScript 中模板字面量类型的语法与 JavaScript 模板字符串字面量非常相似。
语法
您可以按照以下语法在 TypeScript 中使用模板字面量类型。
type type_name = `some_text ${variable_name}`
在上述语法中,“type_name”是类型的名称。
您需要使用反引号 (``) 来定义模板字面量类型。
“some_text”可以是任何将保持不变的字符串值。
要在类型中添加任何动态值,您需要在“${}”结构内添加变量名。
示例
让我们通过一些 TypeScript 示例来详细了解模板字面量类型。
示例:基本用法
在下面的代码中,我们定义了“World”类型,其中包含“World”作为值。“Greeting”类型是一个模板字面量类型,其值会根据“World”变量的值而改变。
接下来,我们创建了类型为“Greeting”的“greeting”变量,其中包含“Hello World”值。如果我们尝试为其分配另一个值,TypeScript 编译器将抛出错误。
type World = "world"; // Defining a template literal type type Greeting = `Hello, ${World}`; const greeting: Greeting = "Hello, world"; // Correct // const wrongGreeting: Greeting = "Hello, everybody"; // Error: This type is "Hello, world" specifically. console.log(greeting);
编译后,它将生成以下 JavaScript 代码
const greeting = "Hello, world"; // Correct // const wrongGreeting: Greeting = "Hello, everybody"; // Error: This type is "Hello, world" specifically. console.log(greeting);
上面的示例代码将产生以下输出
Hello, world
示例:与联合类型结合
在此代码中,“size”类型包含多个类型值的联合。“ResponseMessage”类型是一个模板字面量类型,其值会根据“Size”类型的值而改变。
selectSize() 函数采用类型为“Size”的字符串作为参数,并返回类型为“ResponseMessage”的值。
接下来,我们通过传递“medium”作为函数参数来调用该函数。如果我们尝试传递除“small”、“medium”和“large”之外的任何其他字符串值作为函数参数,它将抛出错误。
// Creating a type using literal type type Size = "small" | "medium" | "large"; // Custom template literal type type ResponseMessage = `${Size} size selected`; // Function to select size function selectSize(size: Size): ResponseMessage { return `${size} size selected`; } // Call the function const response: ResponseMessage = selectSize("medium"); // "medium size selected" console.log(response);
编译后,它将生成以下 JavaScript 代码
// Function to select size function selectSize(size) { return `${size} size selected`; } // Call the function const response = selectSize("medium"); // "medium size selected" console.log(response);
其输出如下所示
medium size selected
示例:条件字符串模式
在此示例中,我们使用了带有约束的泛型类型。这里的“T extends Status”表示 T 的值只能来自 status。statusMessage 类型是类型“T”和“status”字符串的组合。
printStatus() 函数采用类型 T 作为参数,该参数可以是“Status”类型中的任何一个值,并返回类型为“statusMessage”的值。
接下来,我们通过传递“loading”值(它是“Status”类型的一部分)来调用 printStatus() 函数。
// Definition of the Status type type Status = "loading" | "success" | "error"; // T can be any of the values in the Status type type StatusMessage<T extends Status> = `${T}Status`; // Function to return a message based on the status function printStatus<T extends Status>(status: T): StatusMessage<T> { return `${status} Status` as StatusMessage<T>; } // Call the function with the "loading" status const loadingMessage = printStatus("Loading"); // "loadingStatus" console.log(loadingMessage);
编译后,它将生成以下 JavaScript 代码
// Function to return a message based on the status function printStatus(status) { return `${status} Status`; } // Call the function with the "loading" status const loadingMessage = printStatus("Loading"); // "loadingStatus" console.log(loadingMessage);
其输出如下所示
Loading Status
示例:API 路由生成
以下示例演示了模板字面量类型的实际应用。
然后,我们定义了 Method 类型,它可以具有 REST API 方法类型中的任何值。Entity 类型定义实体对象。
getRoute() 方法分别采用类型为 Entity 和 Method 的 entity 和 method 作为参数。它在组合 entity 和 method 值后返回类型为 APIRoute 的字符串值。
// Defining the Method and Entity types type Method = "get" | "post" | "delete"; type Entity = "user" | "post"; // Defining the ApiRoute type type ApiRoute = `/${Entity}/${Method}`; // Defining the getRoute function function getRoute(entity: Entity, method: Method): ApiRoute { return `/${entity}/${method}` as ApiRoute; } // Using the getRoute function const userRoute = getRoute("user", "post"); // "/user/post" console.log(userRoute);
编译后,它将生成以下 JavaScript 代码
// Defining the getRoute function function getRoute(entity, method) { return `/${entity}/${method}`; } // Using the getRoute function const userRoute = getRoute("user", "post"); // "/user/post" console.log(userRoute);
其输出如下所示
/user/post
在 TypeScript 中,模板字面量类型主要用于需要创建动态类型的情况。