Вы можете сделать что-то подобное, если у вас есть три состояния. 'true'
указывает, что строка не обрабатывается как boolean:
true
Преобразование 1
0
и '0'
к true
и 0
'false'
null
undefined
и false
кfalse
function primitiveToBoolean(value: string | number | boolean | null | undefined): boolean {
if (value === 'true') {
return true;
}
return typeof value === 'string'
? !!+value // we parse string to integer first
: !!value;
}
Вот тест единицы:
describe('primitiveToBoolean', () => {
it('should be true if its 1 / "1" or "true"', () => {
expect(primitiveToBoolean(1)).toBe(true);
expect(primitiveToBoolean('1')).toBe(true);
expect(primitiveToBoolean('true')).toBe(true);
});
it('should be false if its 0 / "0" or "false"', () => {
expect(primitiveToBoolean(0)).toBe(false);
expect(primitiveToBoolean('0')).toBe(false);
expect(primitiveToBoolean('false')).toBe(false);
});
it('should be false if its null or undefined', () => {
expect(primitiveToBoolean(null)).toBe(false);
expect(primitiveToBoolean(undefined)).toBe(false);
});
it('should pass through booleans - useful for undefined checks', () => {
expect(primitiveToBoolean(true)).toBe(true);
expect(primitiveToBoolean(false)).toBe(false);
});
});
Рецепт TypeScript: Элегантный Parse Boolean (ссылка на исходное сообщение)
Я предполагаю, что вы хотите, чтобы boolVar был истинным для ввода, равным true, а вход равен «true» (тот же для false), иначе он должен быть ложным.
let input = readSomeInput(); // true,"true",false,"false", {}, ...
let boolVar = makeBoolWhateverItIs(input);
function makeBoolWhateverItIs(input) {
if (typeof input == "boolean") {
return input;
} else if typeof input == "string" {
return input == "true";
}
return false;
}
Преобразование 1
0
и '0'
к true
и 0
'false'
null
undefined
и false
кfalse
function primitiveToBoolean(value: string | number | boolean | null | undefined): boolean {
if (value === 'true') {
return true;
}
return typeof value === 'string'
? !!+value // we parse string to integer first
: !!value;
}
Вот тест единицы:
describe('primitiveToBoolean', () => {
it('should be true if its 1 / "1" or "true"', () => {
expect(primitiveToBoolean(1)).toBe(true);
expect(primitiveToBoolean('1')).toBe(true);
expect(primitiveToBoolean('true')).toBe(true);
});
it('should be false if its 0 / "0" or "false"', () => {
expect(primitiveToBoolean(0)).toBe(false);
expect(primitiveToBoolean('0')).toBe(false);
expect(primitiveToBoolean('false')).toBe(false);
});
it('should be false if its null or undefined', () => {
expect(primitiveToBoolean(null)).toBe(false);
expect(primitiveToBoolean(undefined)).toBe(false);
});
it('should pass through booleans - useful for undefined checks', () => {
expect(primitiveToBoolean(true)).toBe(true);
expect(primitiveToBoolean(false)).toBe(false);
});
});
Рецепт TypeScript: Элегантный Parse Boolean (ссылка на исходное сообщение)
Я предполагаю, что вы хотите, чтобы boolVar был истинным для ввода, равным true, а вход равен «true» (тот же для false), иначе он должен быть ложным.
let input = readSomeInput(); // true,"true",false,"false", {}, ...
let boolVar = makeBoolWhateverItIs(input);
function makeBoolWhateverItIs(input) {
if (typeof input == "boolean") {
return input;
} else if typeof input == "string" {
return input == "true";
}
return false;
}