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;
