給定以下多載函式:
foo(tool: 'a', poaram: boolean, poarama: number): boolean
foo(tool: 'b', paramo: string, paramoa: string): boolean
foo(tool: 'a' | 'b', ...args: any[]): boolean {
if (tool === 'a') {
const [ poaram, poarama ] = args
}
return false
}
有什么方法可以分別輸入poaram和poarama不輸入anyasboolean和asnumber嗎?
我知道休息引數和傳播運算式中的元組,但我看不到上面的用例的連接。
uj5u.com熱心網友回復:
如果你被允許每晚使用 TypeScript (4.6) 你可以考慮這個解決方案:
function foo(...args: ['a', boolean, number] | ['b', string, string]): boolean {
const [fst, scd, thrd] = args;
if (fst === 'a') {
const x = scd; // boolean
const y = thrd // number
}
return false
}
Playground 甚至沒有休息引數:
function foo([first, second, third]: ['a', boolean, number] | ['b', string, string]): boolean {
if (first === 'a') {
const x = second; // boolean
const y = third // number
}
return false
}
此處添加了上述功能TypeScript/pull/46266
如果不允許,則應避免元組解構:
function foo(...args: ['a', boolean, number] | ['b', string, string]): boolean {
if (args[0] === 'a') {
const x = args[1]; // boolean
const y = args[2] // number
}
return false
}
uj5u.com熱心網友回復:
您可以為函式的實作型別選擇其中之一:
foo(tool: 'a'|'b', ...args: [boolean, number]|[string, string]): boolean { // or
foo(tool: 'a'|'b', arg1: boolean|string, arg2: number|string): boolean {
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366079.html
