首先,您将看到的代码片段是一个人为的示例。我只是好奇为什么打字不起作用。
interface MyState {
a: boolean;
b: number;
}
const defaultState: MyState = {
a: false,
b: 1
};
const keys = Object.keys(defaultState) as Array<keyof MyState>;
export default function App() {
const [myState, setMyState] = React.useState<MyState>(defaultState);
React.useEffect(() => {
keys.forEach((key) => {
setMyState((prev) => ({
...prev,
[key]: "lol". // should've given an error but it didn't
}));
});
}, []);
Run Code Online (Sandbox Code Playgroud)
所以我有一个defaultState和它在组件外部定义的键列表。在 useEffect 中,我使用密钥来更新状态(现在它只是将每个值更改为“lol”)。我传递了一个回调作为 中的更新程序,setMyState它返回的应该是新状态。但是在这里我将值设为字符串,这违反了我拥有的接口MyState。
我想知道为什么它没有触发错误
这是一个现场演示:https : //codesandbox.io/s/sweet-dewdney-u83id?file=/ src/ App.tsx
没有反应的最小例子:游乐场
我有Map<A, B> map1并且Map<B, C> map2我需要制作一个Map<A, C>. BiMap如果可能的话,我也想要一个使用番石榴的解决方案。
显然,假设集合 A、B 和 C 之间确实存在双射映射。我想要一个视图,即我不想制作任何元素的副本。
map1并且map2是不可变的。
public static <A, B, C> Map<A, C> merge(map1: Map<A, B>, maps2: Map<B, C>) {
// best way to implement?
}
Run Code Online (Sandbox Code Playgroud)
*注意:我更喜欢现有的解决方案,而不是创建自己的解决方案MergedMap<A, B, C> implements Map<A, C>并实现所有方法。