在Typescript中使用RXJS的间隔和映射时键入错误。错误代码:ts(2740)
我正在尝试在我的一个项目的typescript中使用rxjs,并且正在努力键入一个函数。 我试图给出一个类型(返回值类型)的函数是createMessageSource在Typescript中使用RXJS的间隔和映射时键入错误。错误代码:ts(2740),typescript,rxjs,typescript-typings,rxjs-pipeable-operators,Typescript,Rxjs,Typescript Typings,Rxjs Pipeable Operators,我正在尝试在我的一个项目的typescript中使用rxjs,并且正在努力键入一个函数。 我试图给出一个类型(返回值类型)的函数是createMessageSource import { interval, Subscription, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; type MessageType = { name: string; content: string; }
import { interval, Subscription, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
type MessageType = {
name: string;
content: string;
}
const createMessageSource =
(period: number, name: string, content: string) =>
interval(period)
.pipe(map(i => ({
name,
content: `${content} - ${i}`,
})));
就我所理解的问题而言,pipe命令的返回值应该是可观察的或订阅的。因此,到目前为止,我尝试了以下类型:
const createMessageSource: Observable<MessageType[]> = ...
const createMessageSource: Subscription = ...
const createMessageSource:Observable=。。。
const createMessageSource:订阅=。。。
这两种组合都以vscode中显示的以下类型脚本错误结束:
类型“(句点:数字,名称:字符串,属性:字符串)=>Observable”缺少类型“Observable”中的以下属性:\u isScalar,source,operator,lift和其他6个。ts(2740)
Thx为获得事先的帮助,确实,.pipe()
返回了一个可观察的。您的问题是,createMessageSource
不是一个可观察的函数,而是一个返回可观察的函数
因此,您可以定义一个新的MessageFactory
类型:
type MessageSourceFactory = (period: number, name: string, content: string) => Observable<MessageType>;
const createMessageSource: MessageSourceFactory =
(period: number, name: string, content: string) =>
interval(period).pipe(
map(i => ({
name,
content: `${content} - ${i}`,
}))
);
type MessageSourceFactory=(句点:数字,名称:字符串,内容:字符串)=>可观察;
const createMessageSource:MessageSourceFactory=
(期间:编号、名称:字符串、内容:字符串)=>
间隔(周期)。管道(
地图(i=>({
名称
内容:`${content}-${i}`,
}))
);
或者,如果满足您的需要,您可以将其定义为函数:
function createMessageSource(period: number, name: string, content: string): Observable<MessageType> {
return interval(period).pipe(
map(i => ({
name,
content: `${content} - ${i}`,
}))
);
}
函数createMessageSource(句点:数字,名称:字符串,内容:字符串):可观察{
返回间隔(周期)。管道(
地图(i=>({
名称
内容:`${content}-${i}`,
}))
);
}
createMessageSource的正确类型是Observable
,因为您的代码不发射数组,而是单个对象。这是一个多么复杂的问题。谢谢老板的快速帮助。工作得很好,我觉得自己应该哑口无言!上帝保佑你,乐意帮忙。我们都有这样的时刻:-)