簡體   English   中英

JavaScript:切換非布爾值的簡寫

[英]JavaScript: Shorthand to toggle a non-boolean value

有沒有更好的簡寫來切換foo

type Foo = 'BAR' | 'BAZ';

let foo: Foo = 'BAR';

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

toggleFoo();

您可以取一個 object 值相反的值。

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

只有兩種狀態,使用0表示“關閉”,使用1表示“開啟”會更簡單。 這具有在if語句中易於使用的額外優勢。

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

如果您想要一種在兩種狀態之間切換的可重用方式,這是另一個想法。

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操場

(不確定是否有任何方法可以避免返回值的運行時類型檢查,以防它是非原始的,例如我的mixedToggler示例。)

合並我對這種方法的一些答案:

enum StateValues {
  OFF = 0,
  ON = 1
}

type State = StateValues.OFF | StateValues.ON;

const toggleState = (state: State) => {
  return state ^= 1
}

let myState: State = StateValues.OFF;

console.log(StateValues[myState]); // "OFF"

myState = toggleState(myState);
console.log(StateValues[myState]); // "ON"

myState = toggleState(myState);
console.log(StateValues[myState]); // "OFF"

打字游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM