javascript - Lägga till egenskap till funktion med TypeScript


Säg att jag har ett funktionsuttryck som kallas run:

let run = function(){


};

Jag vill lägga till en egenskap kallad "default" till denna run-funktion, en referens till sig själv.

run.default = run;

detta är för att stödja flera modulexportformat i JS.

Jag hör att det bästa sättet att göra detta är med ett namnrymd.

Här är min faktiska kod:

namespace run {

  export interface Run {
    (paths: Array<string>, opts: run.IOpts, cb: Function): void
    default: Run;
  }

  export interface IOpts {
    babelExec?: string,
    all?: boolean
  }
}


  const run : run.Run = function (paths: Array<string>, opts: run.IOpts, cb: Function): void {

    //....

  }


run.default = run;
export = run;

men jag får den här varningen:

Vet någon varför det felmeddelandet uppstår?

Som du kan se, tror TS att jag inte har egenskaps-typningarna för standardegenskapen, men jag är ganska säker på att jag har det med namespace-deklarationen... eller inte? Blir så förvirrad av detta fel - felet/varningen verkar felaktigt.

Svar #1

Felet uppstår eftersom funktionen du tilldelar till default inte har en default-egenskap - det är bara en funktion.

Du har deklarerat default som Run, så allt som tilldelas det måste också ha en default-egenskap.

Du kan antingen göra default valfritt:

default?: Run;

Eller så kunde man deklarera det som en funktion:

default: (paths: Array<string>, opts: run.IOpts, cb: Function) => void;

Svar #2

Om du inte använde ett reserverat ord (default) skulle du kunna göra det så här:

export function run() {
  // ...
}

export namespace run {
  export const DEFAULT = run;
}

Men för det du verkade försöka göra tror jag att det enklaste skulle vara:

export function run() {
  // ...
}

export default run;

Relaterade artiklar