我正在尝试在我的一个项目的打字稿中使用 rxjs,并且正在努力输入一个函数。 我试图提供类型(返回值类型)的函数是 createMessageSource。
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 命令的返回值应该是一个 Observable 或者一个 Subscription。所以到目前为止我尝试了以下类型:
const createMessageSource: Observable<MessageType[]> = ...
const createMessageSource: Subscription = ...
这两种组合都以 vscode 中显示的以下打字稿错误结尾:
Type '(句点:数字,名称:字符串,属性:字符串) => Observable<{ name: string;内容:数量; }>' 缺少类型 'Observable
感谢事先的帮助
答案 0 :(得分:1)
.pipe()
确实返回一个 Observable。您的问题是 createMessageSource
不是 Observable,而是一个 返回 Observable 的函数 :-)
所以你可以定义一个新的 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}`,
}))
);
或者你可以像函数一样定义它,如果这适合你的需要:
function createMessageSource(period: number, name: string, content: string): Observable<MessageType> {
return interval(period).pipe(
map(i => ({
name,
content: `${content} - ${i}`,
}))
);
}