【问题标题】:JavaScript: Shorthand to toggle a non-boolean valueJavaScript:切换非布尔值的简写
【发布时间】:2021-05-24 02:26:07
【问题描述】:

有没有更好的快捷方式来切换foo

type Foo = 'BAR' | 'BAZ';

let foo: Foo = 'BAR';

const toggleFoo = () => {
  foo = foo === 'BAR' ? 'BAZ' : foo;
};

toggleFoo();

【问题讨论】:

  • 让我这样问,你为什么用两个魔术字符串来模拟一个布尔值?切换布尔值不是更简单吗?或者一般处理布尔值
  • 布尔值不可行,因为foo 实际上是一个需要使用的值。出于疑问,ON 和 OFF 只是虚拟值。

标签: javascript reactjs typescript react-native redux


【解决方案1】:

你可以取一个相反的对象作为值。

const toggleFoo = () => {
  foo = { BAR: 'BAZ', BAZ: 'BAR' }[foo];
};

【讨论】:

    【解决方案2】:

    只有两种状态,使用0 表示“关闭”和1 表示“开启”会更简单。这具有在if-statement 中易于使用的额外优势。

    let foo = 1;
    const toggleFoo = () => foo ^= 1;
    if(foo){
       //on
    } else {
      //off
    }
    

    【讨论】:

      【解决方案3】:

      如果您想要一种在两种状态之间切换的可重复使用的方式,还有另一个想法。

      const createToggler = <F, T>(toggleStates: [F, T], initialState = false) => {
        let state = initialState
        return () => {
          state = !state
          return toggleStates[+state] // convert boolean to number for indexing
        }
      }
      

      TypeScript playground

      (不确定是否有任何方法可以避免对返回值进行运行时类型检查,以防它是非原始类型,例如我的 mixedToggler 示例。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-10
        • 1970-01-01
        • 2021-09-02
        • 2017-02-18
        • 2017-09-27
        • 2021-02-24
        • 2012-07-21
        相关资源
        最近更新 更多