TypeScript中根据条件定义类型函数的输出方法
P粉764836448
2023-08-14 18:18:08
<p>我正在尝试为我的函数定义输出类型,我想根据<code>toNumberIfNeeded</code>标志在<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
。