web-dev-qa-db-fra.com

Dans VSCode lors de l'exportation de fonctions: "Les déclarations individuelles doivent être toutes exportées ou toutes locales"

J'ai récemment mis à niveau vers Visual Studio Code 0.5.0 et de nouvelles erreurs se sont produites qui n'existaient pas auparavant.

J'ai un tas de fonctions qui sont déclarées localement puis exportées. Depuis la mise à niveau, cependant, le survol de chacun des noms de fonction locaux produit l'erreur Les déclarations individuelles dans la déclaration fusionnée functionName doivent être toutes exportées ou tous locaux.

Il s'agit d'un exemple de fonction locale exportée.

var testParamsCreatorUpdater = function (lTestParams, creatorID){
    lTestParams.creator = creatorID;
    return lTestParams;
};
module.exports.testParamsCreatorUpdater = testParamsCreatorUpdater;

Je me rends compte que je peux changer cela en ...

module.exports.testParamsCreatorUpdater = function (lTestParams, creatorID){
    lTestParams.creator = creatorID;
    return lTestParams;
};

Et ajoutez module.exports. à chaque testParamsCreatorUpdater () appel.

Mais pourquoi le premier extrait est-il faux? Si je comprends bien, require () rend tout ce qui se trouve dans l'objet module.exports accessible à tout ce qui en a besoin.

19
clearwater

Je pense qu'au niveau JavaScript, il ne peut pas faire de différence entre:

var testParamsCreatorUpdater = ...

et

module.exports.testParamsCreatorUpdater = ...

car les noms sont les mêmes. J'ai eu exactement la même erreur (menant à ce post) dans TypeScript lorsque j'ai essayé ceci:

import { AuditService } from '../services/audit.service';
import { Audit } from '../models/audit.model';

@Component({
    selector: 'audit',
    templateUrl: './audit.component.html',
})
export class Audit {
    constructor(private auditService: AuditService) {
    }
}

Donc, TypeScript n'a pas aimé que j'importe un module appelé Audit et a exporté une classe également appelée Audit.

2
leoncc

Je pense que cela est lié à la fonctionnalité de déclaration fusionnée pour TypeScript ref . Je n'ai pas fait de recherche détaillée sur TypeScript, mais il semble qu'il puisse inclure Javascript dans le fichier TypeScript.

Je suppose que la façon dont testParamsCreatorUpdater a été déclaré dans le Javascript a été détectée comme une erreur par VSCode car il pense que les deux déclarations ne peuvent pas être fusionnées.

1
redcomethk