下面的示例不适用于版本5中的链式运算符的直接转换。它给出Typescript编译器错误。
public void Configuration(IAppBuilder app)
{
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
AntiForgeryConfig.UniqueClaimTypeIdentifier = Constants.ClaimTypes.Subject;
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap = new Dictionary<string, string>();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies"
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
Authority = "https://localhost/idprov/core",
ClientId = "mvc",
RedirectUri = "https://localhost/dummyclient/About",
ResponseType = "id_token",
ClientSecret = "secret",
Scope = "openid partyuser",
SignInAsAuthenticationType = "Cookies",
});
}
“ MonoTypeOperatorFunction”类型的参数不可分配 到“ OperatorFunction”类型的参数。种类 参数“源”和“源”不兼容。 类型“可观察”不能分配给类型“可观察”。 不能将“数字”类型分配给“字符串”类型。 [2345]
答案 0 :(得分:1)
这是一个工作版本
from([1, 2])
.pipe(
reduce<number, string>(
(acc, curr) => {
return acc + ' ';
}, '')
).subscribe(x => {
console.log(x);
});
现在要解释一下,这里的问题来自这一行(来自rxjs源代码)并定义了函数签名(类型)
export function reduce<T>(accumulator: (acc: T, value: T, index: number) => T, seed?: T): MonoTypeOperatorFunction<T>;
因此,在您的情况下,因为您没有明确地违反类型,rxjs认为acc
和value
来自同一类型(在您的情况下,number
是因为您正在传递数字数组)
通过明确地定义函数参数的类型,我们正在解决此问题,因为我们可以帮助rxjs / ts使用下面的适当函数签名(这样就不会抛出错误)
export function reduce<T, R>(accumulator: (acc: R, value: T, index: number) => R, seed?: R): OperatorFunction<T, R>;
如果我们必须总结一下,问题是rxjs / ts在键入方面需要一些明确的帮助。
答案 1 :(得分:0)
编辑:在OP描述他有TypeScript问题之前,回答了
您需要导入RxJ并订阅流:
rxjs.from([1, 2]).pipe(
rxjs.operators.reduce((acc, curr) => {
return acc + ' ' + curr;
}, '')
).subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>
答案 2 :(得分:0)
看起来您有两种不同的Observable库,它们分别来自RxJS的单独副本(可能来自较旧的版本)。通过执行package.json
来查看重复软件包的package.lock.json
,node_modules
或$ npm ls rxjs
文件夹,或者只是删除此软件包并执行另一个全新安装。让我知道它是否有效!