我有以下问题。
给出两个文件,intents.ts
和login.ts
,其中intents.ts
包含其他文件
export const loginUiEventsHandler =
publish((uiEvents: Observable<UiEvents>) =>
merge(
uiEvents.pipe(filter(e => e.type === 'EMAIL_LOGIN_CHANGE'), flatMap((e: EmailLoginChange) => validateEmailLogin(e.emailLogin))),
uiEvents.pipe(filter(e => e.type === 'PASSWORD_CHANGE'), flatMap((e: PasswordChange) => validatePassword(e.password))),
uiEvents.pipe(filter(e => e.type === 'LOGIN_CLICK'), flatMap((e: LoginClick) => login(e.emailLogin, e.password)))
)
)
[login.js
包含其他内容
events
.pipe(loginUiEventsHandler)
.subscribe(e => console.log(e))
[当我尝试使用loginUiEventsHandler
将功能intents.ts
从login.ts
导入到import { loginUiEventsHandler } from './intents';
时,出现错误
TypeError: selector(...).subscribe is not a function
但是,当我只复制粘贴相同的函数到login.ts
时,一切似乎都正常。
我做错了什么?如何跨文件重用rxjs UnaryFunction。
如果这个问题显而易见,请原谅,我只是刚开始使用打字稿。
export const loginUiEventsHandler = () => // This is needed
publish((uiEvents: Observable<UiEvents>) =>
merge(
uiEvents.pipe(filter(e => e.type === 'EMAIL_LOGIN_CHANGE'), flatMap((e: EmailLoginChange) => validateEmailLogin(e.emailLogin))),
uiEvents.pipe(filter(e => e.type === 'PASSWORD_CHANGE'), flatMap((e: PasswordChange) => validatePassword(e.password))),
uiEvents.pipe(filter(e => e.type === 'LOGIN_CLICK'), flatMap((e: LoginClick) => login(e.emailLogin, e.password)))
)
)