0

我是 TypeScript 的新手。尝试实例化类时出现错误。下面是我的示例代码,实际代码不同不能分享。

 module ABC {
    export class A {    
       public execute<T>(action: string, data?: any, callerContext?: any): IAsyncResult<T> {
        // CODE::   
        var requestMessage = new Common.ClientClasses.ClientRequestMessage(); **// **ERROR- "WinRTError: Class not registered"****
        requestMessage.requestUri = actionRequest;
        requestMessage.method = "POST";
        requestMessage.body = data ? JSON.stringify(data, null, 2) : null;
        Common.ClientClasses.ClientRequest.executeAsync(requestMessage)
         .done((result: Common.ClientClasses.ClientResponeMessage) => {
             // CODE:
        }
        // Code::
      }
   }
}

declare module Common.ClientClasses {
    class ClientRequestMessage {
        public requestUri: string;
        public method: string;
        public body: string;
    }

    class ClientResponeMessage {
        public status: number;
        public statusText: string;
        public responseText: string;
    }

    class ClientRequest {
        static executeAsync(clientRequestMessage: ClientRequestMessage): any;
    }
}
4

1 回答 1

0

我做了一些改进,应该可以工作:

module ABC {

    export class A {

        public execute<T>(action: string, data?: any, callerContext?: any) {
            var requestMessage = new Common.ClientClasses.ClientRequestMessage();
            requestMessage.method = "POST";
            requestMessage.body = data ? JSON.stringify(data, null, 2) : null;
            Common.ClientClasses.ClientRequest.executeAsync(requestMessage)
        }

     }
}

module Common.ClientClasses {

    export class ClientRequestMessage {
        public requestUri: string;
        public method: string;
        public body: string;
    }

    class ClientResponeMessage {
        public status: number;
        public statusText: string;
        public responseText: string;
    }

    export class ClientRequest {
        static executeAsync(clientRequestMessage: ClientRequestMessage): any {
            console.log("test");
        }
    }
}

然后它可以运行如下:

var a = new ABC.A();
a.execute("some string");

declare module创建一个用于 Intellisense 的定义文件,但它没有提供任何实现,这就是我更改您的代码以便此片段可以工作的原因。

此外,如果您想使用模块中的任何类,则必须使用export它们,以便可以从该模块外部看到它们。

于 2015-05-27T18:00:17.477 回答