Typescript rxjs映射输出的类型不正确

Typescript rxjs映射输出的类型不正确,typescript,rxjs,Typescript,Rxjs,类型“string | number”上不存在属性“length”。财产 类型“number”上不存在“length” 我如何编写它以确保键入正确,而不将返回的作为[number,string]?是,ts将[string,number]转换为(string | number)[,除非您明确指定每个项目的类型: CombineTest([of(1),of('test')])。管道( map([myNumber,myString])=>{ 将[myNumber,myString]返回为[number

类型“string | number”上不存在属性“length”。财产 类型“number”上不存在“length”


我如何编写它以确保键入正确,而不将返回的
作为[number,string]

是,ts将
[string,number]
转换为
(string | number)[
,除非您明确指定每个项目的类型:

CombineTest([of(1),of('test')])。管道(
map([myNumber,myString])=>{
将[myNumber,myString]返回为[number,string];
}),
映射(([myNewNumber,myNewString])=>{
常量测试=myNewString.length;
}),
);
如果不想处理显式类型,也可以使用Object而不是Array:

CombineTest([of(1),of('test')])。管道(
map([myNumber,myString])=>{
返回{myNumber,myString};
}),
map({myNewNumber,myNewString})=>{
常量测试=myNewString.length;
})
);

如果您使用的是TS3.6,您还可以编写
将[myNumber,myString]返回为常量映射(([myNewNumber,myNewString]:[number,string])…)
,因为我猜TypeScript可能不知道数组中只需要两个项目。
combineLatest([of(1), of('test')]).pipe(
  map(([myNumber, myString]) => {
    return [myNumber, myString];
  }),
  map(([myNewNumber, myNewString]) => {
    const test = myNewString.length;
  })
);