javascript - Kan typescript exportera en funktion?
Är det möjligt att exportera en enkel funktion från en TypeScript-modul?
Det här kompilerar inte för mig.
module SayHi {
export function() {
console.log("Hi");
}
}
new SayHi();
Det här arbetsobjektet verkar antyda att du inte kan, men säger det inte rakt ut. Är det inte möjligt?
Svar #1
Det är svårt att säga vad du är ute efter i det exemplet. exports = handlar om att exportera från externa moduler, men kodexemplet du länkade är en intern modul.
Tumregel: Om du skriver module foo { ... }, skriver du ett internt modul; om du skriver export something something på toppnivå i en fil, skriver du ett externt modul. Det är ganska ovanligt att du faktiskt skulle skriva export module foo på toppnivå (eftersom du då skulle dubbelnästa namnet), och det är ännu mer ovanligt att du skulle skriva module foo i en fil som hade en toppnivåexport (eftersom foo inte skulle vara synlig externt).
Följande saker är vettiga (varje scenario avgränsat med en horisontell linje):
// An internal module named SayHi with an exported function 'foo'
module SayHi {
export function foo() {
console.log("Hi");
}
export class bar { }
}
// N.B. this line could be in another file that has a
// <reference> tag to the file that has 'module SayHi' in it
SayHi.foo();
var b = new SayHi.bar();
file1.ts
// This *file* is an external module because it has a top-level 'export'
export function foo() {
console.log('hi');
}
export class bar { }
file2.ts
// This file is also an external module because it has an 'import' declaration
import f1 = module('file1');
f1.foo();
var b = new f1.bar();
file1.ts
// This will only work in 0.9.0+. This file is an external
// module because it has a top-level 'export'
function f() { }
function g() { }
export = { alpha: f, beta: g };
file2.ts
// This file is also an external module because it has an 'import' declaration
import f1 = require('file1');
f1.alpha(); // invokes f
f1.beta(); // invokes g
Svar #2
För att svara direkt på titeln på din fråga eftersom detta dyker upp först i Google:
JA, TypeScript kan exportera en funktion!
Här är ett direkt citat från TS-dokumentationen:
"Vilken som helst deklaration (som en variabel, funktion, klass, typalias eller gränssnitt) kan exporteras genom att lägga till export-nyckelordet."
Referenslänk
Svar #3
Om du använder detta för Angular, exportera då en funktion via en namngiven export. Såsom:
function someFunc(){}
export { someFunc as someFuncName }
annars kommer Angular att klaga på att objektet inte är en funktion.
Redigera: Jag använder Angular 11 nu och detta behövs inte längre. Så det räcker med export function someFunc(){ ...}
