typescript - TypeScript 联合类型成为交集类型混淆
问题描述
一个代码块绘制 1000 个单词:
我无法理解的事情的例子。
为什么mySomething
预期参数的类型无效mySet()
?
看起来应该是“和mySomething
”上的“联合类型的部分”的“交集类型”。my
mySet
我也尝试为info
and 而不是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)
解决方案
推荐阅读
- python - 为什么在尝试使用 bs4 获取包含 python 中特定类的链接时得到空列表?
- r - R:将每个值与列中的一组先前值进行比较
- wordpress - Wordpres 帖子未在移动版本上加载
- java - 抑制/避免在更高版本的 Android SDK 中创建的类的 java.lang.NoClassDefFoundError
- java - 弹簧模块和弹簧启动器模块之间的区别
- javascript - 在 Google Colab Notebook 中提供 iframe:localhost 拒绝连接
- bash - 包含波浪号的字符串的 grep 返回不匹配的行
- r - 根据条件扩展为宽格式
- python - 在tensorflow v1.13中将张量值分配给占位符
- shell - 使用 sed(1) 的 UNIX 命令行上的 CVS 文件解析器,可以完成吗?