模块是否将打字稿代码设置为"Ambient"

Vac*_*ano 1 typescript

我正在尝试开始使用一些打字稿.这就是我的样子:

declare module ServiceActions {
    export class MyClass{
        myFunction(shipmentId: number) : void {
            let test: number;
            test = 32;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到此错误:

无法在环境上下文中声明实现.

当我取出模块时,它工作正常:

export class MyClass{
    myFunction(shipmentId: number) : void {
        let test: number;
        test = 32;
    }
}
Run Code Online (Sandbox Code Playgroud)

我以为我读过模块就像在Typescript中的命名空间一样,但这似乎使它更像是一个抽象/接口概念.

我是否真的因为模块而出现此错误?如果没有,为什么我会遇到这个错误?

注意:我看到了这个问题和答案,但没有回答我的问题.

Her*_*key 6

在这种情况下,由于declare关键字,您处于"环境"上下文中.你想要的是export在你的模块上使用:

export module ServiceActions {
    export class MyClass{
        myFunction(shipmentId: number) : void {
            let test: number;
            test = 32;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你也可以完全放弃export,这更像是命名空间声明.export如果您使用AMD或CommonJS或ES2015之类的模块声明,则需要它.

declare当您要指定模块以包含接口之类的东西时使用.所以也许:

declare module ServiceActions {
    interface MyInterface {
        myFunction(shipmentId: number) : void;
    }
}
module ServiceActions {
    export class MyClass implements MyInterface {
        myFunction(shipmentId: number) : void {
            let test: number;
            test = 32;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,你会在.d.ts文件中看到很多东西.