首页 > 解决方案 > TypeScript 联合类型成为交集类型混淆

问题描述

一个代码块绘制 1000 个单词:

我无法理解的事情的例子。

为什么mySomething预期参数的类型无效mySet()

看起来应该是“和mySomething”上的“联合类型的部分”的“交集类型”。mymySet

我也尝试为infoand 而不是T extends 'a'|'b'|'c'|'d', used创建一个类型,T extends keyof InfoType但结果相同。

我相信我有一天会得到这个,非常感谢帮助。

    type Something = Map<string,boolean> | Map<string,number>

    const [a, setA] = useState(new Map<string,boolean>());
    const [b, setB] = useState(new Map<string,boolean>());
    const [c, setC] = useState(new Map<string,number>());
    const [d, setD] = useState(new Map<string,number>());

    const info = {
      a: [a, setA] as [Map<string,boolean>,React.Dispatch<React.SetStateAction<Map<string, boolean>>>],
      b: [b, setB] as [Map<string,boolean>,React.Dispatch<React.SetStateAction<Map<string, boolean>>>],
      c: [c, setC] as [Map<string,number>,React.Dispatch<React.SetStateAction<Map<string, number>>>],
      d: [d, setD] as [Map<string,number>,React.Dispatch<React.SetStateAction<Map<string, number>>>],
    }

    const f = <T extends 'a'|'b'|'c'|'d'>(t: T) => {
      const [my, mySet] = info[t];
      const mySomething = (t === 'a'||t==='b'? new Map<string,boolean>():new Map<string,number>()) // tried also with: as Something;
      mySet(mySomething);
      mySet(my); // <- this also has the same error
    };

错误:

const mySomething: Something
Argument of type 'Something' is not assignable to parameter of type '(Map<string, boolean> & Map<string, number>) | (Map<string, boolean> & ((prevState: Map<string, number>) => Map<string, number>)) | (((prevState: Map<string, boolean>) => Map<...>) & Map<...>) | (((prevState: Map<...>) => Map<...>) & ((prevState: Map<...>) => Map<...>))'.
  Type 'Map<string, boolean>' is not assignable to type '(Map<string, boolean> & Map<string, number>) | (Map<string, boolean> & ((prevState: Map<string, number>) => Map<string, number>)) | (((prevState: Map<string, boolean>) => Map<...>) & Map<...>) | (((prevState: Map<...>) => Map<...>) & ((prevState: Map<...>) => Map<...>))'.
    Type 'Map<string, boolean>' is not assignable to type '((prevState: Map<string, boolean>) => Map<string, boolean>) & Map<string, number>'.
      Type 'Map<string, boolean>' is not assignable to type '(prevState: Map<string, boolean>) => Map<string, boolean>'.
        Type 'Map<string, boolean>' provides no match for the signature '(prevState: Map<string, boolean>): Map<string, boolean>'.ts(2345)

标签: typescripttypescript-typingstypescript-genericsunion-types

解决方案


推荐阅读