网站搜索

javascript - Typescript 声明的静态类方法不是一个函数


我为我的一些项目创建了一个 ES6 库。

当我导入这个库时,所有静态函数都会报错。

这是一个例子。

我的类 (es6) :

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

export default JsonSerializer

TypeScript 定义文件:

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*/
}

答案#1

我猜这个包含类的文件叫做 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(...)

答案#2

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

在我的代码中,toJson 方法被命名为 toJSON,其中包含大写部分……并且在我的 TypeScript 声明文件中使用了驼峰命名法。