是否可以将远程javascript描述为带有.d.ts文件的typescript模块?

是否可以将远程javascript描述为带有.d.ts文件的typescript模块?,javascript,typescript,typescript-typings,Javascript,Typescript,Typescript Typings,我试图将远程javascript描述为带有.d.ts文件的typescript模块,但收到一条错误消息 未找到模块:无法解析中的“玩家” “/Users/iepsen/project/src” 这是因为它试图加载本地模块 那么,如何加载远程javascript并让typescript知道它们的方法和参数类型呢 src/types/globals.d.ts declare module 'player' { namespace player { function const

我试图将远程javascript描述为带有
.d.ts
文件的typescript模块,但收到一条错误消息

未找到模块:无法解析中的“玩家” “/Users/iepsen/project/src”

这是因为它试图加载本地模块

那么,如何加载远程javascript并让typescript知道它们的方法和参数类型呢

src/types/globals.d.ts

declare module 'player' {
    namespace player {
        function constructor(param1: string, param2: string): void
        function play(): void
    }
    export = player
}
src/index.tsx

import * as Player from 'player';
Player.play();

由于在构建时,这个
player
模块实际上并不包含在代码中,因此需要声明它并将其用作环境名称空间

有关环境名称空间的说明,请参见中的最后一段

本质上,您需要将
.d.ts
文件修改为:

declare namespace Player {
    export interface Base {
        function constructor(param1: string, param2: string): void;
        function play(): void;
    }
}

declare var Player: Player.Base;
然后在你的
index.tsx

// No need for import, as it's an ambient module
Player.play();

你说的远程javascript是什么意思?typedef通常需要位于文件旁边,而远程脚本则不是这种情况,即从http协议加载CDN托管的javascript文件。@Marceliepsen然后您需要指示加载程序将模块说明符
'player'
映射到CDN url。这是一个运行时错误,不是TypeScript错误。@AluanHaddad如何将模块映射到CDN?@MarceloIepsen这取决于您使用的加载程序。例如,在SystemJS中,您可以将其添加到
map
下的
SystemJS.config
中。请参阅您使用的任何工具(例如SystemJS)的文档。注意:我在某种程度上假设,通过一个“远程”、“CDN托管”文件,您的意思是它独立存在,并声明了一些供您使用的全局javascript变量。您的环境变量和全局变量相结合。它们不一样。