如何在打字稿中将字符串转换为布尔值 Angular 4

How to convert string to boolean in typescript Angular 4

我知道我不是第一个问这个问题的人,正如我在标题中提到的,我正在尝试将字符串值转换为布尔值。

我之前已经把一些值存入了本地存储,现在我想获取所有的值并赋值给一些布尔变量。

app.component.ts

localStorage.setItem('CheckOutPageReload', this.btnLoginNumOne + ',' + this.btnLoginEdit);

这里的this.btnLoginNumOnethis.btnLoginEdit是字符串值("true,false").

mirror.component.ts

if (localStorage.getItem('CheckOutPageReload')) {
      let stringToSplit = localStorage.getItem('CheckOutPageReload');
      this.pageLoadParams = stringToSplit.split(',');

      this.btnLoginNumOne = this.pageLoadParams[0]; //here I got the error as boolean value is not assignable to string
      this.btnLoginEdit = this.pageLoadParams[1]; //here I got the error as boolean value is not assignable to string
}

在此组件中 this.btnLoginNumOne 和 this.btnLoginEdit 是 布尔值

我尝试了 Whosebug 中的解决方案,但没有任何效果。

谁能帮我解决这个问题。

方法一:

var stringValue = "true";
var boolValue = (/true/i).test(stringValue) //returns true

方法二:

var stringValue = "true";
var boolValue = (stringValue =="true");   //returns true

方法三:

var stringValue = "true";
var boolValue = JSON.parse(stringValue);   //returns true

方法四:

var stringValue = "true";
var boolValue = stringValue.toLowerCase() == 'true'; //returns true

方法五:

var stringValue = "true";
var boolValue = getBoolean(stringValue); //returns true
function getBoolean(value){
   switch(value){
        case true:
        case "true":
        case 1:
        case "1":
        case "on":
        case "yes":
            return true;
        default: 
            return false;
    }
}

来源:http://codippa.com/how-to-convert-string-to-boolean-javascript/

布尔值 ("true") 也可以完成这项工作

在您的场景中,可以通过 someString === 'true' 之类的方式将字符串转换为布尔值(已经回答过)。

但是,让我尝试解决您的主要问题:处理本地存储。

本地存储只支持字符串作为值;因此,使用它的一个好方法是始终将数据序列化为字符串,然后再将其存储在存储器中,并在获取数据时反转该过程。

用于序列化数据的一种可能不错的格式是 JSON,因为它在 JavaScript 中很容易处理。

如果您的数据可以序列化为 JSON.

,则可以使用以下函数与本地存储进行交互
function setItemInStorage(key, item) {
  localStorage.setItem(key, JSON.stringify(item));
}

function getItemFromStorage(key) {
  return JSON.parse(localStorage.getItem(key));
}

您的示例可以重写为:

setItemInStorage('CheckOutPageReload', [this.btnLoginNumOne, this.btnLoginEdit]);

并且:

const pageLoadParams = getItemFromStorage('CheckOutPageReload');
if (pageLoadParams) {
  this.btnLoginNumOne = pageLoadParams[0];
  this.btnLoginEdit = pageLoadParams[1];
}

我一直在尝试使用 JSON.parse(value) 的不同值,它似乎可以完成工作:

// true
Boolean(JSON.parse("true"));
Boolean(JSON.parse("1"));
Boolean(JSON.parse(1));
Boolean(JSON.parse(true));

// false
Boolean(JSON.parse("0")); 
Boolean(JSON.parse(0));
Boolean(JSON.parse("false"));
Boolean(JSON.parse(false));

定义扩展名:String+Extension.ts

interface String {
  toBoolean(): boolean
}

String.prototype.toBoolean = function (): boolean {
  switch (this) {
    case 'true':
    case '1':
    case 'on':
    case 'yes':
      return true
    default:
      return false
  }
}

并导入任何你想使用它的文件 '@/path/to/String+Extension'

你可以使用它:

let s: string = "true";
let b: boolean = Boolean(s);

如果您知道它在字符串中的有效布尔值,您也可以尝试使用 bang bang 运算符。例如

let trueAsString = 'true';

let convertedStringToBool = !!trueAsString;

此函数会将您的字符串转换为布尔值

export const stringToBoolean = (str: string | null | undefined) => {
    if (!str) {
        return false
    }
    if (typeof str === "string") {
        return !["0", "false", "no", "n", "null", "undefined", "nil"].includes(str.toLowerCase().trim())
    }
    return Boolean(str)
}

我认为这是最准确的:

function parseBoolean(value?: string | number | boolean | null) {
    value = value?.toString().toLowerCase();
    return value === 'true' || value === '1';
}

只需使用<> 运算符:

const Text1 = ""
const Text2 = "there is a text"

console.log(!!Text1) // false
console.log(!!Text2) // true