Typescript “传入”;console.log";进入subscribe()以获取可观察到的

Typescript “传入”;console.log";进入subscribe()以获取可观察到的,typescript,observable,console.log,Typescript,Observable,Console.log,通常,当我想从一个可观察的对象中打印一些结果时,我会这样做 const source = interval(3000); const transform = source.pipe(scan((acc, num) => [...acc, num], [])); transform.subscribe(res => console.log("%c" + res, "color:orange;")); 今天,我注意到我可以像这样将console.

通常,当我想从一个可观察的对象中打印一些结果时,我会这样做

const source = interval(3000);
const transform = source.pipe(scan((acc, num) => [...acc, num], []));
transform.subscribe(res => console.log("%c" + res, "color:orange;"));
今天,我注意到我可以像这样将
console.log
传递到observable中

const source = interval(3000);
const transform = source.pipe(scan((acc, num) => [...acc, num], []));
transform.subscribe(console.log);
它很整洁,我喜欢它。问题是,我没有设法传递额外的参数,将CSS强加给正在控制台输出的东西,这让我觉得,也许这是一个完全不同的东西,我传入的东西,比好的旧的
console.log()
开始。(天真地将参数传递到
subscribe()
中产生了一个错误。)谷歌搜索解释的结果只是如何记录控制台,而没有讨论其他方法或原因

在第二个示例中使用
subscribe
的语法时,是否可以将额外的参数传递到
console.log
?如果是,怎么做?若否,原因为何


这里有一个值得玩味的例子。

看来你还没有完全理解lambdas是如何工作的(或者从未意识到),所以让我来给你一些启发。;-)

每当函数获取一个函数作为参数时,您可以提供要使用的方法,也可以使用fat arrow操作符在适当的位置编写匿名函数(也可以使用typescript或javascript方式编写函数)

然后外部方法将您的方法作为参数获取,并使用参数调用它。由于您的外部方法
.subscribe()
需要一个只有一个参数且没有返回值的方法,因此方法
console.log(text:string)
完全匹配,从而允许更短的写入

不幸的是,每当这个精确匹配不满足您的需求时,您就必须定义一个内联函数,用所需的更改参数调用内部方法

所以,当你有类似于
foo((a,b,c)=>this.something(a,b,c))的东西时,你可以将它重写为
foo(this.something)`。但是只要你想改变这个参数的最小顺序,或者给一个参数加一个常量值(就像你的例子),你就不能用速记了

更新
Ups,刚刚忘记了JS和TS中的绑定。所以fat arrow操作符还有第二个任务。它确保当您查看代码时,
指向预期对象。因此,只有当外部方法与内部方法具有相同的
this
时,JS和TS中的速记才真正起作用(在Rx中永远不会是真的),这意味着即使参数顺序完全匹配,也必须使用fat arrow操作符,速记只适用于一些全局静态方法,如
console.log()

这是一个非常好的答案。我一点也不喜欢。但它仍然非常好。谢谢你启发我。人们以某种方式大量使用lambdas,以至于对引擎盖下的实际机械设备视而不见(或者说失去意识)。然后,你会问一些愚蠢的问题