Типографские аргументы распаковки перегруженной функции - PullRequest
0 голосов
/ 09 июля 2020

Чтобы проиллюстрировать, что я имею в виду под «распаковкой», рассмотрим следующий пример

function simpleFunc(a: number, b: string): void { /* ... */ }
function simpleProxy(args: [number, string]) {
    simpleFunc(...args)
}

Это отлично работает с сопоставлением машинописного текста [число, строка] в (a: число, b: строка) . У меня есть пример использования, когда мне нужно сделать что-то подобное с более сложной функцией, которая имеет перегруженные подписи, например:

function overloadFunc(name: string): void
function overloadFunc(name: string, content: number): void
function overloadFunc(content: number): void
function overloadFunc(name_or_content: string | number, maybe_content?: number): void {
    /* ... */
}

Теперь я не могу выполнить распаковку для компиляции. Я пробовал вот так:

function overloadProxy1(args: [string] | [string, number] | [number]) {
    overloadFunc(...args);
    //           ^^^^^^^
    // Expected 1-2 arguments, but got 0 or more.(2556)
    // ... An argument for 'name' was not provided.
}

А это:

function overloadProxy2(args: [string | number, number?]) {
    overloadFunc(...args);
    //           ^^^^^^^
    // Argument of type 'string | number' is not assignable to parameter of type 'string'.
    // Type 'number' is not assignable to type 'string'.(2345)
}

Есть способ заставить это работать? Если нет, то это где-то задокументировано?

1 Ответ

1 голос
/ 09 июля 2020
• 1000 *
...