是否有更好的快捷方式来切换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"
打印稿操场