JavaScript:用于切换非布尔值的简写



是否有更好的快捷方式来切换foo?

type Foo = 'BAR' | 'BAZ';
let foo: Foo = 'BAR';
const toggleFoo = () => {
foo = foo === 'BAR' ? 'BAZ' : foo;
};
toggleFoo();

可以取与之相反的值

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

只有两种状态,使用0表示"off"会更简单。和1表示"on"。这还有一个额外的优点,就是在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
}
}

打印稿操场

(不确定是否有任何方法可以避免返回值的运行时类型检查,但是,如果它是一个非原语,如我的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"

打印稿操场

最新更新