在 Typescript 中使用 RXJS 的间隔和映射时键入错误。错误代码:ts(2740)
Type Error while using interval and map with RXJS in Typescript. errorcode: ts(2740)
我正在尝试在我的一个项目中使用打字稿中的 rxjs,但我正在努力输入一个函数。
我试图给一个类型(Return值类型)的函数是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}`,
})));
据我了解问题,管道命令的 return 值应该是 Observable 或 Subscription。所以到目前为止我尝试了以下类型:
const createMessageSource: Observable<MessageType[]> = ...
const createMessageSource: Subscription = ...
两种组合都以 vscode 中显示的以下打字稿错误结尾:
类型'(句点:数字,名称:字符串,属性:字符串)=>Observable<{名称:字符串;内容:数量; }>' 缺少类型 'Observable<MessageType[]>' 中的以下属性:_isScalar、source、operator、lift 和 6 more.ts(2740)
感谢事先的帮助
确实 .pipe()
returns 是一个 Observable。你的问题是 createMessageSource
不是一个 Observable,而是一个 函数 returns 一个 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}`,
}))
);
}
我正在尝试在我的一个项目中使用打字稿中的 rxjs,但我正在努力输入一个函数。 我试图给一个类型(Return值类型)的函数是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}`,
})));
据我了解问题,管道命令的 return 值应该是 Observable 或 Subscription。所以到目前为止我尝试了以下类型:
const createMessageSource: Observable<MessageType[]> = ...
const createMessageSource: Subscription = ...
两种组合都以 vscode 中显示的以下打字稿错误结尾:
类型'(句点:数字,名称:字符串,属性:字符串)=>Observable<{名称:字符串;内容:数量; }>' 缺少类型 'Observable<MessageType[]>' 中的以下属性:_isScalar、source、operator、lift 和 6 more.ts(2740)
感谢事先的帮助
确实 .pipe()
returns 是一个 Observable。你的问题是 createMessageSource
不是一个 Observable,而是一个 函数 returns 一个 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}`,
}))
);
}