小编Rub*_*unk的帖子

React w/TypeScript:为什么当 useState 将回调作为更新程序时,状态的类型会丢失

首先,您将看到的代码片段是一个人为的示例。我只是好奇为什么打字不起作用。

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

没有反应的最小例子:游乐场

typescript reactjs

12
推荐指数
1
解决办法
209
查看次数

从 Map&lt;A,B&gt; 和 Map&lt;B,C&gt; 创建 Map&lt;A,C&gt;。Guava BiMap 的奖励积分

我有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>并实现所有方法。

java dictionary

0
推荐指数
1
解决办法
61
查看次数

标签 统计

dictionary ×1

java ×1

reactjs ×1

typescript ×1