2017-05-17 159 views
1

我想將字符串轉換爲布爾值。這樣做有它 一種方式的幾種方法是打字字符串布爾

let input = "true"; 
let boolVar = (input === 'true'); 

這裏的問題是,我要驗證輸入,如果它是真的還是假的。而不是驗證第一個輸入,然後做轉換有沒有更優雅的方式? 在.NET中,我們有bool.TryParse,如果字符串無效,則返回false。在打字稿中是否有任何等同物?

+3

我不知道.NET,但如果'bool.TryParse'返回'的「無效」的字符串FALSE' ......是不是一樣*如果字符串爲「true」,則返回「true」'else'false' * ...?到底你在做什麼? – deceze

+0

如果有人輸入「John」,John不是一個有效的布爾。這並不意味着它是錯誤的。 – pantonis

+1

但是,這不是說你描述的.NET是什麼嗎?我通過它「約翰」,這是無效的,它返回false。我仍然沒有看到區別。 – csmckelvey

回答

-5

我建議您希望boolVar對於輸入等於true且輸入等於「true」(對於false同樣)爲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; 
} 
+2

只要字符串不爲空,'Boolean(input)'將始終返回true。所以你基本上只是在做'let boolVar =(input ==='true')',這首先是個問題。即使它按照您期望的方式工作,那麼它仍然不會在false和非布爾型字符串之間產生區別。 – Ivar

+0

這不是真的,因爲布爾(「someOtherString」)將返回false,布爾({})將返回false。所以如果你不確定你的輸入是一個字符串(可以是任何類型),這是一個很好的解決方案。 true ===「true」也是錯誤的,所以你必須確保輸入的類型是String但是它的let,所以它可能是一切。 – MG83

+0

'布爾(「someOtherString」)'將成立。 [試試看](https://jsfiddle.net/gdp0vLvc/)。從這個問題我明白,輸入將始終是一個字符串。正如我所說,即使你是對的,也不會分別檢查解析是否失敗。 – Ivar

2

你可以做這樣的事情,你可以有三種狀態。 undefined表示該字符串不是可解析爲布爾:

function convertToBoolean(input: string): boolean | undefined { 
    try { 
     return JSON.parse(input); 
    } 
    catch (e) { 
     return undefined; 
    } 
} 

console.log(convertToBoolean("true")); // true 
console.log(convertToBoolean("false")); // false 
console.log(convertToBoolean("invalid")); // undefined 
+0

我正在尋找這樣做的內建功能,但似乎沒有! – pantonis

+0

'JSON.parse'是您將以內置方式執行此操作的最接近的方式。 – Saravana