![](/img/trans.png)
[英]How can I set a default value for an optional parameter of a function in typescript?
[英]How can I tell Typescript to use the default value when an empty string is provided as function parameter?
在 Typescript 中,當為string
類型的參數分配默認值時,空字符串計為某事,不使用默認值。
這是有道理的,但在某些情況下,我想改變它:
function greet (name?:string = 'visitor') {
console.log(`Hello ${name}`)
}
greet('Gromit') // logs "Hello Gromit"
greet() // logs "Hello visitor"
greet('') // logs "Hello " <--- How can I get the default value in this case too?
Typescript 是否可能具有我沒有找到的功能來幫助定義何時應用默認值?
我一直在使用我認為是一種解決方法,現在:
const defaultName = 'visitor'
function greet (name?:string = defaultName) {
const finalName = name || defaultName
console.log(`Hello ${finalName}`)
}
但我寧願對 Typescript 使用更干凈、更慣用的東西,如果不存在更好的模式,我會感到驚訝。
需要明確的是,我希望在負責定義 function 參數的代碼部分中找到一種方法來執行此操作:function greet (/* here */) {}
建議的解決方案在本節之外引入代碼,就像我在解決方法中所做的一樣。
感謝您的任何指點!
無法在 function arguments 中定義此條件。 我能想到的最干凈的方法就是檢查和替換 function 體內的值:
function greet(name?: string) {
name = name || 'visitor'
// other code
}
不存在更好的模式,因為它會與""
覆蓋默認非空值的完全合理的行為相沖突。
您有兩種不同的方式來指定類似默認的行為,其中一種是不存在的值,另一種是在傳遞空/假值時提供值。 這些可能碰巧產生相同的值,但在 function 簽名或實現中沒有更簡潔的模式來表示這一點。
我將對 MaartenDev 和 Vojtěch Strnad 的答案進行的唯一修改是在 JSDoc 中記錄默認值,這可能會實現您的 IDE 集成的目標。 (不幸的是,即使這樣, JSDoc 的可選/默認值支持[name="visitor"]
在 TypeScript Playground 或 VSCode 中也不可見。)
/**
* Greets a person.
*
* @param [name] Name to greet. "visitor" if falsy or absent.
*/
function greet(name?: string) {
name = name || 'visitor'
// other code
}
觀察:當您將默認值初始化為name
參數時,它使該參數成為可選的。 因此,無需顯式添加問號 (?),因為它會通過以下編譯錯誤。
參數不能有問號和初始化器。
關於您面臨的問題,您可以使用Conditional (ternary) operator
擺脫它
function greet (name:string = 'visitor') {
console.log(`Hello ${name}`)
}
greet('' ? '' : undefined) // Hello visitor
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.