尽管Variable在同一个Class中,但TypeScript无法找到命名空间

时间:2016-07-20 16:53:42

标签: node.js typescript callback

我正在尝试定义Callbackdefinitions,以便更容易使用Node.js项目中的许多回调。

我的database.ts文件如下所示:

variant

所以我想要定义一个loadObjectCallback,它表示该参数必须是枚举类型LoadObjectResponse。但是当我尝试这样做时,编译器总是给出错误

export default class Database {

    //Export the enums
    public static LoadObjectResponse = LoadObjectResponse;

    //Export Callback definitions
    public static loadObjectCallback: (resultCode: Database.LoadObjectResponse) => void;//ERROR
    ...
}

enum LoadObjectResponse {
    ERROR_ON_LOADING, //"Error on Loading Object.",
    OBJECT_NOT_FOUND //"Object not found."
}

我不明白为什么它给了我错误,变量本身就在数据库的定义中,为什么它不起作用?

当我尝试在类函数定义中使用它时,它给出了同样的错误:

Cannot find namespace "Database"

再次错误:

public static loadObject(MongoModel, searchObject, callback: Database.LoadObjectResponse) {//ERROR namespace Database not found

调用数据库类中的函数内部

Cannot find namespace "Database"

完美无瑕地工作,为什么它不能在变量定义中起作用?

2 个答案:

答案 0 :(得分:3)

  

找不到命名空间“数据库”

这是一个常见的学习曲线问题。您需要理解并熟悉声明空间的直观概念https://basarat.gitbooks.io/typescript/content/docs/project/declarationspaces.html

type 声明空间或变量声明空间中的内容不同。

在您的情况下,public static LoadObjectResponse变量因此无法用作类型(注释用法: Database.LoadObjectResponse上的错误)。

修复

请勿将class视为namespace文件是一个模块

export class Database {
    //Export Callback definitions
    public static loadObjectCallback: (resultCode: LoadObjectResponse) => void;//ERROR
}

export enum LoadObjectResponse {
    ERROR_ON_LOADING, //"Error on Loading Object.",
    OBJECT_NOT_FOUND //"Object not found."
}

还要注意export defaulthttps://basarat.gitbooks.io/typescript/content/docs/tips/defaultIsBad.html

答案 1 :(得分:1)

这是因为Database.LoadObjectResponse是属性而不是类型。您不能将属性用作类型。

要使其工作,请将其更改为使用属性的类型:

static loadObjectCallback: (resultCode: typeof Database.LoadObjectResponse) => void;

或直接引用LoadObjectResponse的枚举类型:

static loadObjectCallback: (resultCode: LoadObjectResponse) => void