首页 > 解决方案 > rxjs 地图输出不正确的输入

问题描述

combineLatest([of(1), of('test')]).pipe(
  map(([myNumber, myString]) => {
    return [myNumber, myString];
  }),
  map(([myNewNumber, myNewString]) => {
    const test = myNewString.length;
  })
);

类型“字符串”上不存在属性“长度”| 数字'。类型“数字”上不存在属性“长度”。

我怎样才能写这个,这样打字是正确的,而不用回车as [number, string]

标签: typescriptrxjs

解决方案


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

combineLatest([of(1), of('test')]).pipe(
    map(([myNumber, myString]) => {
        return [myNumber, myString] as [number, string];
    }),
    map(([myNewNumber, myNewString]) => {
        const test = myNewString.length;
    }),
);

或者,如果您不想处理显式类型,则可以使用 Object 而不是 Array:

combineLatest([of(1), of('test')]).pipe(
    map(([myNumber, myString]) => {
        return {myNumber, myString};
    }),
    map(({myNewNumber, myNewString}) => {
        const test = myNewString.length;
    })
);

推荐阅读