6

TypeScript 字符串类型

 4 years ago
source link: https://segmentfault.com/a/1190000040622746
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

字符串声明

JavaScript 语言中一个,在 TypeScript 中我们也可以通过单引号 '' 或者双引号 "" 来声明一个字符串类型的变量。

let str1:string = 'xkd';
let str2:string = "侠课岛";

console.log(str1);
console.log(str2);

这其实和 JavaScript 中的字符串类型差不多,TypeScript 中。

字符串新特性

TypeScript 中的字符串类型和 JavaScript 中的字符串基本类似,但是相较于 JavaScriptTypeScript 中的字符串类型新增了一些新的特性。TypeScript 中字符串的新特性有如下三种:

  • 多行字符串。
  • 字符串模板。
  • 自动拆分字符串。

多行字符串

首先是多行字符串,传统的 JavaScript 字符串换行需要使用 + 进行拼接,否则会报错。

我们来下面这段看 JavaScript 代码:

var str = "aaa" + 
"bbb";

console.log(str);  // aaabbb

将其中的 + 去掉,代码会报错:

var str = "aaa
bbb";

console.log(str);  // SyntaxError: Invalid or unexpected token

而在 TypeScript 中则不需要使用 + 拼接,我们可以使用 `` 双撇号(键盘左上角的那个按键)将字符串包起来,这样就可以直接实现换行。将上面的代码改写成 TypeScript 代码:

let str = `aaa
bbb`;
console.log(str);

我们在终端执行 tsc test.ts 命令,将上述 TypeScript 代码编译成 JavaScript 代码,会自动生成一个换行符\n

var str = "aaa\nbbb";
console.log(str);

然后执行这段代码,输出结果如下:

aaa
bbb

字符串模板

TypeScript 中可以在多行字符串里引入一个表达式插入变量或一个方法的调用。

看下面这段 JavaScript 代码:

var username = "侠课岛";
var getName = function (){
  return "大侠";
} 

console.log("你好:" + username);
console.log("你好:" + getName());

我们可以通过字符串模板,将这段代码改写成如下所示 TypeScript 代码:

let username:string = "侠课岛";
let getName = function (){
  return "大侠";
} 

console.log(`你好:${username}`);
console.log(`你好:${getName()}`);

自动拆分字符串

当我们用字符串模板去调用一个方法时,字符串模板表达式中的值就会自动赋值给被调用方法中的参数。

我们来看下面这段代码:

function test(template, name, age) {
    console.log(template);  
    console.log(name);      // name就是${myName}
    console.log(age);       // age就是${getAge()}
  }
  
  var myName = "Iven";
  var getAge = function () {
    return 22;
  }
  
// 通过字符串模板的方式,可以实现字符串的拆分
test`我叫 ${myName},今年 ${getAge()} 岁了`;

将上述代码编译成 JavaScript 代码:

var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
    if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
    return cooked;
};
function test(template, name, age) {
    console.log(template);
    console.log(name); // name就是${myName}
    console.log(age);  // age就是${getAge()}
}
var myName = "Iven";
var getAge = function () {
    return 22;
};
// 通过字符串模板的方式,可以实现字符串的拆分
test(__makeTemplateObject(["\u6211\u53EB ", ",\u4ECA\u5E74 ", " \u5C81\u4E86"], ["\u6211\u53EB ", ",\u4ECA\u5E74 ", " \u5C81\u4E86"]), myName, getAge());
[ '我叫 ', ',今年 ', ' 岁了' ]
Iven
22

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK