În TypeScript, cum să declari o funcție înainte de utilizarea sa - stil C
Am o funcție care este, de exemplu
function init(model: any, eventData: UserApplicationModel) : any
Aș dori să evit să fiu nevoit să amestec informațiile despre tipuri cu codul sursă al funcției. Am încercat (în același fișier sursă):
declare function init(model: any, eventData: UserApplicationModel) : any;
function init(model, eventData) {
// source code here
}
dar primesc eroare TS2384: Semnăturile de supraîncărcare trebuie să fie toate ambientale sau non-ambientale.
Întrebarea mea este: este posibil deloc să se pre-declare o funcție, astfel încât să nu fie nevoie să se repete informațiile despre tip? Ar fi grozav, adăugarea informațiilor despre tip în același timp cu definirea funcției duce la linii foarte lungi în unele cazuri.
Răspuns #1
Poți defini semnătura unei funcții folosind un type, cum ar fi:
type init = (model: any, eventData: UserApplicationModel) => any;
Apoi inițializează-l mai târziu, atribuind o expresie de funcție anonimă unei variabile de acel tip:
var init: init = function (model, eventData) {
...
};
Acest lucru vă va oferi siguranță completă de tip chiar și în interiorul corpului funcției. Acest lucru ar putea fi util atunci când transpilați orbeste cod C în TypeScript.
Răspunsul #2
function init(model: any, eventData: UserApplicationModel) : any;
function init(model, eventData) {
// source code here
}
Va rezolva problema. Observați omisiunea modificatorului declare. Pentru ca acest lucru să funcționeze, semnătura tipului trebuie să fie direct deasupra implementării corespunzătoare, așa cum este arătat. Puteți crea mai multe suprasarcini ale unei implementări în acest mod. În orice caz, semnătura tipului implementării reale va fi convenabil mascată de semnătura funcției de deasupra sa.
Actualizare
Cred că s-ar putea să fi înțeles greșit întrebarea. Aceasta va furniza o semnătură de funcție tastată pentru ca apelanții să o folosească, dar nu va furniza implicit tipurile pentru parametrii și tipul de revenire al implementării. Implementarea va fi doar restricționată să aibă tipuri de argumente, aritatea argumentelor și un tip de revenire care să corespundă semnăturii de suprasarcină de deasupra sa.
