这里有一个简单的函数,可以处理大多数情况,包括将布尔值作为输入处理(以防万一):
type Falsey = undefined | null;
const parseBoolean = (val: string | boolean | number | Falsey): boolean => {
const s = val && val.toString().toLowerCase().trim();
if (s == 'true' || s == '1')
return true;
return false;
}
以下是一个简单的测试示例:
describe('Boolean Parser', () => {
[
{ val: 'true', expected: true },
{ val: 'false', expected: false },
{ val: 'True', expected: true },
{ val: 'False', expected: false },
{ val: 'TRUE', expected: true },
{ val: 'FALSE', expected: false },
{ val: '', expected: false },
{ val: '1', expected: true },
{ val: '0', expected: false },
{ val: false, expected: false },
{ val: true, expected: true },
{ val: undefined, expected: false },
{ val: null, expected: false },
{ val: 0, expected: false },
{ val: 1, expected: true },
{ val: 111, expected: false }
].forEach(args => {
it(`should parse ${args.val} to boolean`, () => {
expect(parseBoolean(args.val)).toBe(args.expected);
});
})
});
if (xxx)
中使用非布尔值,那么我在其他布尔上下文中也应该可以使用非布尔值。在我看来,要么两者都允许,要么都禁止。 - oz1cz!!
的答案之所以有效,是因为非运算符的输入是 Any 类型,输出是布尔类型。 - Peter Wone