繁体   English   中英

Typescript 编译 Javascript 代码不起作用(variable.default.function())

[英]Typescript compiled Javascript Code is not working (variable.default.function())

问题是从 home.ts 生成的 js 没有找到我的 index.js class。 我在 Typescript 中没有错误,但是当我运行 javascript 时出现错误。

类型错误:index_1.default.login 不是 function 在 /Users/Jannik/Documents/Web/Willhub-ts/dist/controllers/home.js:12:37 在 Object。 (/Users/Jannik/Documents/Web/Willhub-ts/dist/controllers/home.js:15:3) 在 Module._compile (internal/modules/cjs/loader.js:956:30) 在 Object.Module。 _extensions..js (internal/modules/cjs/loader.js:973:10) 在 Module.load (internal/modules/cjs/loader.js:812:32) 在 Function.Module._load (internal/modules/cjs /loader.js:724:14) 在 Module.require (internal/modules/cjs/loader.js:849:19) 在 require (internal/modules/cjs/helpers.js:74:18) 在 Object。 (/Users/Jannik/Documents/Web/Willhub-ts/dist/app.js:20:24) 在 Module._compile (internal/modules/cjs/loader.js:956:30)

知道这可能来自哪里吗?

主页.ts:

router.get('/', Index.login());
router.get('/', Index.index());

主页.js:

router.get('/', index_1.default.login());
router.get('/', index_1.default.index());

索引.ts

import {Request, Response} from 'express';


export default class Index {
private static _index: Function;
private static _login: Function;

constructor(){
    this.constructIndex();
    this.constructLogin();
}

//Private Methods:
private constructIndex(): void {
    Index._index = function (req: Request, res: Response, next) {

        res.render("main", { "header-enabled": true, "nav-enabled": true })
        next();
    }
}

private constructLogin(): void {
    Index._index = function (req: Request, res: Response, next) {
        res.render("main", { "header-enabled": true, "nav-enabled": true })
        const isLoggedIn: boolean = true;
    }
}

//Public Methods:
public static get index() : Function {
    return this._index;
}

public static get login(): Function {
    return this._login;
}

}

索引.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });


class Index {
constructor() {
    this.constructIndex();
    this.constructLogin();
}
//Private Methods:
constructIndex() {
    Index._index = function (req, res, next) {
        res.render("main", { "header-enabled": true, "nav-enabled": true });
        next();
    };
}
constructLogin() {
    Index._index = function (req, res, next) {
        res.render("main", { "header-enabled": true, "nav-enabled": true });
        const isLoggedIn = true;
    };
}
//Public Methods:
static get index() {
    return this._index;
}
static get login() {
    return this._login;
}
}
exports.default = Index;
//# sourceMappingURL=index.js.map

首先,您的constructLogin()可能是错误的,因为我猜它应该分配Index._login

private constructLogin(): void {
    // -----\/------------------
    Index._index = function (req: Request, res: Response, next) {
        res.render("main", { "header-enabled": true, "nav-enabled": true })
        const isLoggedIn: boolean = true;
    }
}

如果您解决了这个问题,请在首先创建实例之前检查您是否使用Index.login() 那是因为:

  • Index.login是返回Index._login
  • Index.login()调用生成的Index._login ,但是...
  • Index._login设置在constructLogin()中,并且...
  • constructLogin()中调用constructor() function

如果在创建实例之前调用Index.login()Index._login将是undefined

 class Index { constructor() { this.constructIndex(); this.constructLogin(); } //Private Methods: constructIndex() { Index._index = function (req, res, next) { res.render("main", { "header-enabled": true, "nav-enabled": true }); next(); }; } constructLogin() { // NOTICE: Assigns `_login` instead Index._login = function (req, res, next) { res.render("main", { "header-enabled": true, "nav-enabled": true }); const isLoggedIn = true; }; } //Public Methods: static get index() { return this._index; } static get login() { return this._login; } } console.log(Index._login); // undefined let i = new Index(); console.log(Index._login); // function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM