模板文字(模板字符串)

从语法上讲,这些是使用反引号(即`)而不是单引号(')或双引号(“)引号的字符串。Template Literals的动机有三方面:

  • 字符串插值
  • 多行字符串
  • 标记模板

字符串插值

另一个常见的用例是当您想从某些静态字符串+一些变量中生成一些字符串时。为此,您将需要一些 模板逻辑 ,这就是 模板字符串 最初来自其名称的位置。从那以后,它们被正式重命名为 模板文字 。这是您之前可能生成html字符串的方式:

var lyrics = 'Never gonna give you up';
var html = '<div>' + lyrics + '</div>';

现在,使用模板文字,您可以执行以下操作:

是否曾经想过在JavaScript字符串中添加换行符?也许您想嵌入一些歌词?您将需要使用我们最喜欢的转义字符 对文字换行符 进行转义 \ ,然后 \n 在下一行手动将新行放入字符串中。如下所示:

var lyrics = "Never gonna give you up \
\nNever gonna let you down";

使用TypeScript,您可以仅使用模板字符串:

var lyrics = `Never gonna give you up
Never gonna let you down`;

您可以 tag 在模板字符串之前放置一个函数(称为a ),它有机会预处理模板字符串文字和所有占位符表达式的值并返回结果。一些注意事项:

  • 所有静态文字都作为数组传递给第一个参数。
  • 占位符表达式的所有值都作为其余参数传递。通常,您只需要使用rest参数将它们也转换为数组。

这是一个示例,其中我们有一个标记函数(名为 htmlEscape ),可以从所有占位符处转义html:

var say = "a bird in hand > two in the bush";
var html = htmlEscape `<div> I would just like to say : ${say}</div>`;
// a sample tag function
function htmlEscape(literals: TemplateStringsArray, ...placeholders: string[]) {
    let result = "";
    // interleave the literals with the placeholders
    for (let i = 0; i < placeholders.length; i++) {
        result += literals[i];
        result += placeholders[i]
            .replace(/&/g, '&amp;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;');
    // add the last literal
    result += literals[literals.length - 1];
    return result;
 

注意:您可以注释placeholders为any []。不管您以何种方式对其进行注释,TypeScript都会进行类型检查,以确保用于调用标签的占位符与注释匹配。例如,如果您希望处理stringnumbers,则可以进行注释...placeholders:(string | number)[]

对于ES6之前的编译目标,代码非常简单。多行字符串变为转义字符串。字符串插值变为字符串串联。标记的模板成为函数调用。

在任何语言中,多行字符串和字符串插值都是很棒的事情。您现在可以在JavaScript中使用它们了,这非常好(感谢TypeScript!)。带标签的模板使您可以创建功能强大的字符串实用程序。

翻译来源:https://gitee.com/yunwisdoms/typescript-book/blob/master/docs/template-strings.md

云函数TypeScript模板使用教程 cloud-functions-typescript-templateTypeScript template for Google Cloud Functions项目地址:https://gitcode.com/gh_mirrors/cl/cloud-functions-typescript-template 1. 项目的目录结构及介绍 cloud-fun...
TypeScript支持字符串字面量类型(String literal types),用以限定只有指定的字符串才被允许,使用起来和枚举类型很相似,但前者更轻量一些。 function setVerticalAlignment(pos: "top" | "middle" | "bottom") { // ... setVerticalAlignment("middel"); // ~~~~~~~~ // error: Argument of type '"mi
typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,在typescript中主要给我们提供了以下数据类型 布尔类型(boolean) 数字类型(number) 字符串类型(string) 数组类型(array) 元组类型(tuple) 枚举类型(enum) 任意类型(any) n...
TypeScript 4.1 快要发布了,老爷子Anders Hejlsberg[1] 加入了一项重大更新,「字符串模板类型」的支持。昨天看到这个更新的我特别兴奋,曾几何时,只要一遇到字符串拼接相关的类型,TypeScript 就束手无策了,比如: Vuex中加了namespace以后,dispatch一个mutation type会带上前缀dispatch('cart/add')。 lodash的get方法,可以对一个对象进行get(obj, 'a.b.c')这...
一、TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 TypeScript 提供最新的和不断发展的 JavaScript 特性,包括那些来自 2015 年的 ECMAScript 和未来的提案中的特性,比如异步功能和 De
英文 | https://www.javascripttutorial.net翻译 | 杨小爱在今天的教程中,我们将了解 TypeScript 字符串数据类型。与 JavaScript 一样,TypeScript 使用双引号 (") 或单引号 (') 来包围字符串文字:let firstName: string = 'John'; let title: string = ...
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' 177339