TypeScript中根據條件定義類型函數的輸出方法
P粉764836448
2023-08-14 18:18:08
<p>我正在嘗試為我的函數定義輸出類型,我想根據<code>toNumberIfNeeded</code>標誌在<code>string</code>和<code>number<code>string</code>和<code>number<code>類型之間設定條件,假設如果<code>toNumberIfNeeded</code>為真,則此函數將傳回一個數字類型,反之傳回字串類型。我該如何做? </p>
<pre class="brush:php;toolbar:false;">interface Options {
uppercase?: boolean;
filterSpecialChars?: boolean;
toNumberIfNeeded?: boolean;
}
export const textTransformer = (text: string, options?: Options) => {
const { uppercase, filterSpecialChars, toNumberIfNeeded} = options || {};
// 我的處理邏輯程式碼
return toNumberIfNeeded ? parseInt(text) : text;
}</pre>
<p>預期的範例:</p>
<pre class="brush:php;toolbar:false;">textTransformer('hello'); // 傳回字串類型
textTransformer('123', { toNumberIfNeeded: true }); // 回傳數字型別</pre>
你可以重構
textTransformer()
方法,接受一個泛型參數,並使用條件型別來檢查toNumberIfNeeded
是否為true
# 或false
。我認為 TypeScript 無法自動縮小回傳值的類型。你必須使用類型斷言,否則返回類型將被推斷為string | number
。