Typescript声明的静态类方法不是函数

时间:2019-04-02 11:35:14

标签: javascript typescript

我为某些项目创建了es6库。

当我导入该库时,所有静态函数都会引发错误。

这是一个例子。

我的班级(es6):

class JsonSerializer {
    static toJson(node) { /* some code */ }
}

export default JsonSerializer

打字稿定义文件:

export class JsonSerializer {
    static toJson(root: Node): any

    static fromJson(config: any): Node
}

我这样导入我的班级

import {JsonSerializer} from 'ls-serializer'

当我尝试使用toJson静态方法时。

它给我以下错误:

_lsSerializer.JsonSerializer.toJson is not a function

对于所有静态方法,我都有相同的错误。

我错过了什么吗?

编辑

这是我的库webpack配置:

const path = require('path');

module.exports = {

    entry : {
        serializer : './src/serializer.js'
    },

    output : {
        path     : path.resolve(__dirname, 'dist'),
        filename : '[name].bundle.js',
        libraryTarget: 'commonjs-module'
    },

    resolve : {
        extensions : ['.js', '.jsx'],

        alias : {
            '@' : path.resolve(__dirname, 'src'),
            '~' : path.resolve(__dirname, 'examples')
        }
    },

    devServer : {
        contentBase : path.resolve(__dirname, 'dist'),
        compress    : true,
        port        : 9000
    },

    module : {
        rules : [{
            test    : /\.(js|jsx)$/,
            exclude : /node_modules/,
            loader  : 'babel-loader'
        }, {
            test : /\.(html)$/,
            use  : {
                loader  : 'html-loader',
                options : {
                    attrs : [':data-src']
                }
            }
        }]
    },

    devtool : 'source-map',

    mode : 'development'
};

这是./src/serializer.js文件代码:

import JsonSerializer from './serializers/JsonSerializer'

export {
    JsonSerializer, /* other exports*/
}

2 个答案:

答案 0 :(得分:2)

我猜这个类的文件名为ls-serializer.ts

您必须像这样使用它:

import JsonSerializer from './ls-serializer'

JsonSerializer.toJson(...)

或者您可以避免使用default

// ls-serializer.ts
export class JsonSerializer {
    static toJson(node) { /* some code */ }
}

并像这样导出类:

import {JsonSerializer} from './ls-serializer'

JsonSerializer.toJson(...)

答案 1 :(得分:0)

我发现了问题,这有点可怜...

在我的代码中,toJson方法被命名为toJSON,其首字母大写...在驼峰的情况下,在我的打字稿声明文件中。