我正在嘗試分配一個默認情況下等于true但可以有條件的布林值,具體取決于props物件中是否存在實際的布林值,就像這樣
// default boolean to true
let valid:boolean = true;
if(self.props.hasOwnProperty("valid")) {
// a property has been specified so use that instead
valid = self.props.valid;
}
self.props.valid是一個可選引數,但我收到以下錯誤:
TS2322: Type 'boolean | undefined' is not assignable to type 'boolean'.
Type 'undefined' is not assignable to type 'boolean'.
我怎樣才能讓有條件的分配作業?
uj5u.com熱心網友回復:
因為它是可選的,所以它的值可能是undefined,您不能將其分配給boolean變數。hasOwnProperty不會有幫助,因為可選屬性允許與 value 一起出現undefined。
您可以使用不同的型別保護:
if (self.props.valid !== undefined) { // Or `if (typeof self.props.valid !== "udnefined"`
valid = self.props.valid;
}
游樂場示例
或者您可以使用無效合并:
valid = self.props.valid ?? valid;
游樂場示例
self.props.valid如果不是,那只會改變值undefined。
您甚至可以在valid最初定義時這樣做:
let valid:boolean = self.props.valid ?? true;
游樂場示例
uj5u.com熱心網友回復:
您valid僅定義為布林值boolean | undefined
所以你要么
let valid:boolean | undefined = true;
if(self.props.hasOwnProperty("valid")) {
valid = self.props.valid; // possible undefined is introduced here
}
要么
let valid:boolean = true;
if(self.props.hasOwnProperty("valid")) {
valid = self.props.valid ?? true // also could be the variable valid
// this was valid is never undefined
uj5u.com熱心網友回復:
TS 無法通過查看 if 條件來判斷屬性已經存在。告訴編譯器您知道該屬性存在:
let valid:boolean = true;
interface propsInterface {
valid? : boolean
}
let props : propsInterface = {
valid : false
}
if(props.hasOwnProperty("valid")) {
// a property has been specified so use that instead
valid = props.valid!;
}
因為您已經簽入了您的代碼。您可以添加non null assertion operator.
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/429977.html
標籤:打字稿
