首页 > 解决方案 > 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*/
}

标签: javascripttypescript

解决方案


我猜这个类的文件被称为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(...)

推荐阅读