Typescript conversion to boolean

后端 未结 8 453
名媛妹妹
名媛妹妹 2021-02-02 05:19

In Typescript I can do this:

var xxx : some_type;

if (xxx)
    foo();
else
    bar();

Here xxx will be treated as a boolean, regardless of its

8条回答
  •  难免孤独
    2021-02-02 05:41

    Here is my solution for "typescript": "^3.3.3":

    function toBool(a: any) {
      return Boolean(a).valueOf();
    }
    
    export { toBool };
    

    unit test:

    import { toBool } from '../../utils/bool';
    
    describe('bool', () => {
      describe('#toBool', () => {
        it('should convert string to boolean', () => {
          expect(toBool('false')).toBeTruthy();
          expect(toBool('')).toBeFalsy();
        });
        it('should convert number to boolean', () => {
          expect(toBool(1)).toBeTruthy();
          expect(toBool(0)).toBeFalsy();
          expect(toBool(-1)).toBeTruthy();
          expect(toBool(Infinity)).toBeTruthy();
          expect(toBool(-Infinity)).toBeTruthy();
        });
        it('should convert null to boolean', () => {
          expect(toBool(null)).toBeFalsy();
        });
        it('should convert undefined to boolean', () => {
          expect(toBool(undefined)).toBeFalsy();
        });
        it('should convert NaN to boolean', () => {
          expect(toBool(NaN)).toBeFalsy();
        });
        it('should convert object to boolean', () => {
          expect(toBool({})).toBeTruthy();
        });
        it('should convert array to boolean', () => {
          expect(toBool([])).toBeTruthy();
        });
      });
    });
    

    unit test results:

     PASS  src/__tests__/utils/bool.spec.ts
      bool
        #toBool
          ✓ should convert string to boolean (3ms)
          ✓ should convert number to boolean (1ms)
          ✓ should convert null to boolean (1ms)
          ✓ should convert undefined to boolean
          ✓ should convert NaN to boolean (1ms)
          ✓ should convert object to boolean (1ms)
          ✓ should convert array to boolean
    
    Test Suites: 1 passed, 1 total
    Tests:       7 passed, 7 total
    Snapshots:   0 total
    Time:        3.79s, estimated 4s
    

提交回复
热议问题