kyl*_*rke 11 mapbox typescript
我正在使用带有TypeScript的mapbox-gl库,并且我已经安装了它的社区源类型定义@types/mapbox-gl.当我尝试导入并设置accessToken以使用该库时,我的TypeScript编译器会抛出此错误:
TS2540: Cannot assign to 'accessToken' because it is a constant or a read-only property.
所以我提取了.d.ts文件,有问题的变量看起来非常易于分配(见这里:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mapbox-gl/index.d.ts) :
declare namespace mapboxgl {
let accessToken: string;
...
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import * as mapbox from 'mapbox-gl';
mapbox.accessToken = 'token';
Run Code Online (Sandbox Code Playgroud)
版本!
"@types/mapbox-gl": "^0.35.0",
"typescript": "^2.3.4",
"mapbox-gl": "^0.37.0",
Run Code Online (Sandbox Code Playgroud)
TypeScript hackery说我可以将mapbox投射到任何一个并且它可以工作,但我很好奇这里输入的错误是什么.
sil*_*kes 30
这是我一直在使用的临时解决方法:
Object.getOwnPropertyDescriptor(mapboxgl, "accessToken").set('YOUR_TOKEN');
Run Code Online (Sandbox Code Playgroud)
由于对象被重新定义为使用自定义setter将令牌放在内部闭包中 - 我们可以直接调用setter函数,如示例所示.
潜水更深一点,我们可以看到es6模块是定义的常量:https: //github.com/Microsoft/TypeScript/issues/6751#issuecomment-177114001
然后我们可以这样做:(mapboxgl as any).accessToken = ...哪个会奏效.
Dav*_*son 11
对于那些现在发现这个的人......你甚至不需要以accessToken这种方式设置 Mapbox ,它可以作为一个选项传入(自 v1.2 起)
const map = new mapboxgl.Map({
accessToken: '...',
container: '...',
style: '...',
});
Run Code Online (Sandbox Code Playgroud)
可惜这不是任何示例中使用的方法(还)。
文档:https : //docs.mapbox.com/mapbox-gl-js/api/#map
1.2 发布说明:https : //github.com/mapbox/mapbox-gl-js/releases/tag/v1.2.0
添加它的公关:https : //github.com/mapbox/mapbox-gl-js/pull/8364