遗漏的类型错误:app.Med.aff不是一个函数

问题描述:

我创建的代码打字稿,当我加入jQuery和我用requirejs和编译AMD模块,但是当我在浏览器中午饭我有这样的错误:遗漏的类型错误:app.Med.aff不是一个函数

Uncaught TypeError: app.Med.aff is not a function

代码app.ts:

import * as $ from "jquery" 


    export class Med{ 
     public aff(){ 
      $('#med').click(function(eventObject){ 
       $('#test').show(); 
      }) 
     } 
    } 

代码config.ts:

require(
     ['app'], 
     function(app: any){ 
      app.Med.aff() 
     }, 

     function (err: any) { 
      console.error('ERROR: ', err.requireType); 
      console.error('MODULES: ', err.requireModules); 
     } 
    ); 

代码app.js:

define(["require", "exports", "jquery"], function (require, exports, $) { 
     "use strict"; 
     Object.defineProperty(exports, "__esModule", { value: true }); 
     var Med = (function() { 
      function Med() { 
      } 
      Med.prototype.aff = function() { 
       $('#med').click(function (eventObject) { 
        $('#test').show(); 
       }); 
      }; 
      return Med; 
     }()); 
     exports.Med = Med; 
    }); 

代码config.js:

"use strict"; 
    require(['app'], function (app) { 
     app.Med.aff(); 
    }, function (err) { 
     console.error('ERROR: ', err.requireType); 
     console.error('MODULES: ', err.requireModules); 
    }); 

和代码tsconfig.json:

{ 
     "compilerOptions": { 
     "target": "es5",       /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */ 
     "module": "amd",      /* Specify module code generation: 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 
     "noImplicitAny": true, 
     "strictNullChecks": true, 
     "outDir": "./build", 
     "lib": ["es2016","dom"],      /* Redirect output structure to the directory. */ 
     "strict": true       /* Enable all strict type-checking options. */ 
     }, 

     "exclude": [ 
     "./build", 
     "./node_modules" 
     ] 
    } 

aff被定义为原型方法。

你需要或者创建Med一个实例,并调用它new Med().aff()

或者声明aff静态

export class Med{ 
    static aff(){ 
     $('#med').click(function(eventObject){ 
      $('#test').show(); 
     }) 
    } 
} 
+0

当创建静态aff()..错误已解决,但如何创建新的Med()。aff()!!!和config.ts中的应用程序! – devit2017

+0

@ devit2017我不知道你的要求是什么。你可以像'app.medInstance = new Med'那样做,然后像'app.medInstace.aff()'一样使用它。但是,如果你打算只使用它的一个实例,为什么你要'Med'成为一个类? –

+0

为什么!不解决与app.medInstance =新的Med – devit2017

@Yury

此代码的工作:

程式。 ts:

import * as $ from "jquery" 


    export class Med{ 
     public aff(){ 
      $('#med').click(function(eventObject){ 
       $('#test').toggle('slow'); 
      }) 
     } 
    } 

    let f = new Med() 
    f.aff(); 

代码config.ts:

require(
['app'], 
function(app: any){ 

}, 

function (err: any) { 
    console.error('ERROR: ', err.requireType); 
    console.error('MODULES: ', err.requireModules); 
} 

);

谢谢你我的朋友