Loggfila typen signaturer for funksjoner med variable argument teller

stemmer
66

Jeg har problemer med å definere grensesnitt med funksjons medlemmer som godtar variable mengder av argumenter. Ta følgende objekt bokstavelig som et eksempel:

var obj = {
    func: () => {
        for(var i = 0; i < arguments.length; i++) {
            console.log(arguments[i]);
        }
    }
};

Jeg vil gjerne være i stand til å definere et grensesnitt som for eksempel:

interface IExample {
    func: ( ??? ) => void;
}

Slik at følgende kode kan kompilere uten feil:

var test = (o: IExample) {
    o.func(a);
    o.func(a, b);
    o.func(a, b, c);
    ...
}
Publisert på 05/10/2012 klokken 03:40
kilden bruker
På andre språk...                            


3 svar

stemmer
118

Loggfila bruker ECMAScript 6 spredning forslag,

http://wiki.ecmascript.org/doku.php?id=harmony:spread

men legger skriver kommentarer så dette ville se ut,

interface Example {
    func(...args: any[]): void;
}
Svarte 05/10/2012 kl. 03:53
kilden bruker

stemmer
2

Bare for å legge til chuck svar, trenger du ikke å ha et grensesnitt definert som sådan. Du kan bare gjøre det ...direkte i metoden:

class Header { constructor(public name: string, public value: string) {} }

getHeaders(...additionalHeaders: Header[]): HttpHeaders {
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'application/json')

    if (additionalHeaders && additionalHeaders.length)
        for (var header of additionalHeaders)
            headers.append(header.name, header.value);

    return headers;
}

Deretter kan du kalle det:

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()))

Eller

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()), new Header('Something', "Else"))
Svarte 04/02/2018 kl. 12:49
kilden bruker

stemmer
0

Hvis ... args [] argumentet ikke brukes Loggfila fortsatt skaper en array i Javascript og kopierer argumenter til det.

For å unngå dette unnecessariness du kan lage en prototype for funksjon samt funksjonen, slik: -

function format_n(str: string, ... $n: any[]): string;
function format_n(str: string): string {
    return str.replace(/%(\d+)/g, (_, n) => format_n.arguments[n]);
}
Svarte 21/05/2018 kl. 14:34
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more