簡體   English   中英

當 function 參數提供空字符串時,如何告訴 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM