cannot redeclare block scoped variable (typescript)

后端 未结 8 1189
醉话见心
醉话见心 2020-12-08 18:02

I\'m building a node app, and inside each file in .js used to doing this to require in various packages.

let co = require(\"co\");

But gett

8条回答
  •  独厮守ぢ
    2020-12-08 18:30

    I got the same problem, and my solution looks like this:

    // *./module1/module1.ts*
    export module Module1 {
        export class Module1{
            greating(){ return 'hey from Module1'}
        }
    }
    
    
    // *./module2/module2.ts*
    import {Module1} from './../module1/module1';
    
    export module Module2{
        export class Module2{
            greating(){
                let m1 = new Module1.Module1()
                return 'hey from Module2 + and from loaded Model1: '+ m1.greating();
            }
        }
    }
    

    Now we can use it on the server side:

    // *./server.ts*
    /// 
    import {Module2} from './module2/module2';
    
    export module Server {
        export class Server{
            greating(){
                let m2 = new Module2.Module2();
                return "hello from server & loaded modules: " + m2.greating();
            }
        }
    }
    
    exports.Server = Server;
    
    // ./app.js
    var Server = require('./server').Server.Server;
    var server = new Server();
    console.log(server.greating());
    

    And on the client side too:

    // *./public/javscripts/index/index.ts*
    
    import {Module2} from './../../../module2/module2';
    
    document.body.onload = function(){
        let m2 = new Module2.Module2();
        alert(m2.greating());
    }
    
    // ./views/index.jade
    extends layout
    
    block content
      h1= title
      p Welcome to #{title}
      script(src='main.js')
      //
        the main.js-file created by gulp-task 'browserify' below in the gulpfile.js
    

    And, of course, a gulp-file for all of this:

    // *./gulpfile.js*
    var gulp = require('gulp'),
        ts = require('gulp-typescript'),
        runSequence = require('run-sequence'),
        browserify = require('gulp-browserify'),
        rename = require('gulp-rename');
    
    gulp.task('default', function(callback) {
    
        gulp.task('ts1', function() {
            return gulp.src(['./module1/module1.ts'])
                .pipe(ts())
                .pipe(gulp.dest('./module1'))
        });
    
        gulp.task('ts2', function() {
            return gulp.src(['./module2/module2.ts'])
                .pipe(ts())
                .pipe(gulp.dest('./module2'))
        });
    
        gulp.task('ts3', function() {
            return gulp.src(['./public/javascripts/index/index.ts'])
                .pipe(ts())
                .pipe(gulp.dest('./public/javascripts/index'))
        });
    
        gulp.task('browserify', function() {
            return gulp.src('./public/javascripts/index/index.js', { read: false })
                .pipe(browserify({
                    insertGlobals: true
                }))
                .pipe(rename('main.js'))
                .pipe(gulp.dest('./public/javascripts/'))
        });
    
        runSequence('ts1', 'ts2', 'ts3', 'browserify', callback);
    })
    

    Updated. Of course, it's not neccessary to compile typescript files separatly. runSequence(['ts1', 'ts2', 'ts3'], 'browserify', callback) works perfect.

提交回复
热议问题