我正在尝试定义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"
完美无瑕地工作,为什么它不能在变量定义中起作用?
答案 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 default
:https://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