首页 > 其他分享 >关于 TypeScript 展开运算符在 Angular 应用开发中的应用一例

关于 TypeScript 展开运算符在 Angular 应用开发中的应用一例

时间:2023-09-08 19:14:21浏览次数:50  
标签:... TypeScript console log 展开 运算符 数组 Angular

笔者最近一直在 SAP 中国研究院从事 Angular 开发,我所在的团队负责使用 Angular 开发 SAP Commerce Cloud 这款产品的界面,项目代号为 Spartacus.

这是一个开源项目,我们项目的 Github 地址如下

最近我处理了一个 bug,我的代码改动放在这个 Pull Request里。

下面是这个 Pull Request 里包含的代码改动,可以看到我使用了 TypeScript 的展开运算符(三个句点):

代码里使用的 stringifyWithContext 方法,接收一个字符串类型的变量和一个 Context 对象作为输入参数,返回一个序列化之后的 JSON 字符串。这个输出的 JSON 字符串可以写入 kibana 等 Trace 工具内。

  protected stringifyWithContext(
    message: string,
    context: ExpressServerLoggerContext
  ): string {
    const logObject = { message, context: this.mapContext(context) };

    return isDevMode()
      ? JSON.stringify(logObject, null, 2)
      : JSON.stringify(logObject);
  }

而 transform 方法的输出是一个数组。为了把数组里的元素依次展开成 String 和 Context 对象,故我们对该数组使用展开运算符。

实际上,在 Angular 技术领域,特别是在处理组件通信、数据传递以及函数参数展开方面,展开运算符(Spread Operator)是一种重要的语法特性。该运算符主要用于将数组、对象或者函数参数在特定的上下文中进行展开,以实现更灵活的数据传递和函数调用。

笔者利用修复这个 bug 的机会,系统地学习了 TypeScript 里展开运算符的使用方式。

在上面我提供的代码中,涉及到展开运算符的地方是:

...this.transform(message, context, this._transformers, this)

这行代码使用展开运算符将函数 this.transform() 的返回值展开作为参数传递给 this.stringifyWithContext() 函数。

展开运算符的基本概念

展开运算符 ... 允许将一个可迭代对象(比如数组、字符串或类数组对象等)拆分成独立的元素,或者将多个元素合并为一个数组或对象。这种特性在函数调用时尤其有用,可以将数组或对象的元素分散为函数的参数。

数组展开

const arr = [1, 2, 3];
console.log(...arr); // 输出:1 2 3

函数参数展开

function add(a, b, c) {
  return a + b + c;
}

const values = [1, 2, 3];
console.log(add(...values)); // 输出:6

展开运算符在提供的代码中的应用

回到我修复 bug 的上下文代码:

  1. this.transform(message, context, this._transformers, this):这是一个函数调用,返回一个数组或可迭代对象,其中包含了要传递给 this.stringifyWithContext() 函数的参数。

  2. ...this.transform(message, context, this._transformers, this):在这里,展开运算符 ... 将函数调用的结果拆分成独立的参数,以便将它们传递给 this.stringifyWithContext() 函数。

  3. this.stringifyWithContext(...):现在,拆分的参数会作为独立的值传递给 this.stringifyWithContext() 函数,使得函数能够正确接收和处理这些参数。

示例

为了更好地理解,我们来看一个示例,假设有如下的函数:

function concatenateStrings(...args) {
  return args.join(' ');
}

const strings = ['Hello', 'world', 'from', 'Angular'];
const result = concatenateStrings(...strings);
console.log(result); // 输出:Hello world from Angular

在这个示例中,concatenateStrings() 函数使用展开运算符将传入的字符串数组展开为独立的参数,然后将它们连接起来并返回结果。

剩余运算符

注意,在 TypeScript 代码中,剩余运算符(Rest Operator)也用 ... 表示,但它的使用场景是在函数参数、数组解构和对象解构中,代表剩余的元素。

看一个剩余运算符用在函数参数中的例子:

function sum(...nums: number[]): number {
  return nums.reduce((a, b) => a + b, 0);
}

console.log(sum(1, 2, 3, 4, 5));  // 输出 15

在这个例子中,...nums 表示 sum 函数可以接受任意数量的参数,并将它们作为一个数组处理。

数组解构的例子:

let arr = [1, 2, 3, 4, 5];
let [first, ...rest] = arr;
console.log(first);  // 输出 1
console.log(rest);   // 输出 [2, 3, 4, 5]

在这个例子中,...rest 表示除了第一个元素之外的所有元素。

对象解构的例子:

let obj = { a: 1, b: 2, c: 3, d: 4 };
let { a, ...rest } = obj;
console.log(a);  // 输出 1
console.log(rest);  // 输出 { b: 2, c: 3, d: 4 }

在这个例子中,...rest 表示除了属性 a 之外的所有属性。

总结

展开运算符在 Angular 开发中经常用于组件通信、函数调用和参数传递的场景,能够增加代码的灵活性和可读性。它的使用有助于简化函数调用、数组合并等操作,提高代码的可维护性和可扩展性。

标签:...,TypeScript,console,log,展开,运算符,数组,Angular
From: https://www.cnblogs.com/sap-jerry/p/17688353.html

相关文章

  • 关于 Angular 应用开发里 Subject 和 BehaviorSubject 的用法一例
    笔者一直在SAP中国研究院从事CommerceCloud这款Angular应用的开发,最近工作中修复了一个bug.在SpartacusUI上点击Create按钮之后:维护User的明细数据,然后点击Save按钮:点击之后,我们期望的结果是收到一条用户成功创建的提示消息,并且页面自动导航回到点击Creat......
  • 什么是 Angular 应用 angular.json 中的 assets 数组
    在Angular项目中,angular.json是一个非常重要的配置文件,用于定义和管理项目的各种设置和构建选项。其中,assets数组是angular.json中的一个关键配置项,用于指定需要在构建后包含在应用程序中的静态资源文件和文件夹。在本文中,我将解释什么是assets数组,并提供详细示例来说明如何使用它......
  • 深入理解 Python and 逻辑运算符(踩坑)
    1.引子defenabled()->bool:a=["a,"b"] b=Truec=Falsereturn(bandc)or(banda)以上代码返回什么?实际生产项目踩到的坑,也怪自己没理解到未,才疏学浅!!!想当然的以为python自己会做真值判断了。其实真值判断是在if条件语句时会生效,但在普通的......
  • 基本运算符
    基本运算符基本运算符有:算术运算符比较运算符赋值运算符逻辑运算符身份运算符算术运算符算术运算符符号:符号说明实例+加1+1=2-减5-1=4*乘1*5=5/除(与数学中一样)6/2=3%取余,即返回除法的余数7%2=1//整除(只保留商的整数部分)7//2=3......
  • 自增自减运算符的辨析
    a++就是,现让b等于a原来的值,再进行a=a+1;而++a便是,先执行a=a+1,再赋值给c 补充很多运算都会用到Math工具,如求3的平方如图所示 ......
  • 【记录】Angular 中使用 eChart
    使用echart,要注意版本的对应关系v16.xforAngular>=16v15.xforAngular>=15v14.xforAngular>=14v8.xforAngular>=13v7.xforAngular>=11v6.xforAngular>=10,<11v5.xforAngular>=6,<10v2.3.1forAngular<6该项目的开......
  • python基础 05基本运算符
    基本运算一、算术运算符x=10y=20print(x+y)#30print(x-y)#-10print(x*y)#200print(x/y)#0.5print(x%y)#10print(x//y)#0print(x**y)#100000000000000000000二、比较运算符​ 返回的都是布尔值x=10y=20print(x>y)......
  • day03-运算符
    Python提供了多种类型的运算符,用于执行各种操作,包括算术运算、比较运算、逻辑运算、赋值运算等。1、算数运算符运算符作用例子结果+加7+29-减7+25*乘7*214/除(保留小数点)7/23.5//整除(取商)7//......
  • C++运算符优先级
    所有(可能)运算符共分为18级。第1级运算符含义::作用域解析运算符第2级运算符含义()函数调用()值构造,即type(expr)[]数组下标->间接成员运算符.直接成员运算符const_cast专用的类型转换dynamic_cast专用的类型转换re......
  • 类的特殊方法和运算符重载
    4.4Python类的高级特性|AmosCloudWiki ......