Mapbox-gl 输入不允许 accessToken 分配
Mapbox-gl typing won't allow accessToken assignment
我将 mapbox-gl 库与 TypeScript 一起使用,并且我已经使用 @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;
...
这是我的代码:
import * as mapbox from 'mapbox-gl';
mapbox.accessToken = 'token';
版本!
"@types/mapbox-gl": "^0.35.0",
"typescript": "^2.3.4",
"mapbox-gl": "^0.37.0",
TypeScript hackery 说我可以将 mapbox 投射到任何一个,它会工作,但我很好奇这里的输入有什么问题。
这是我一直在使用的临时解决方法:
Object.getOwnPropertyDescriptor(mapboxgl, "accessToken").set('YOUR_TOKEN');
说明
由于对象被重新定义为使用自定义 setter,它将令牌放置在内部闭包中 - 我们可以直接调用 setter 函数,如示例所示。
再深入一点,我们可以看到 es6 模块根据定义是常量:
https://github.com/Microsoft/TypeScript/issues/6751#issuecomment-177114001
然后我们可以做类似的事情:(mapboxgl as any).accessToken = ..
。这会起作用。
您也可以使用这种格式:
(mapboxgl as typeof mapboxgl).accessToken = ...
对于那些现在发现这个的人......你甚至不需要这样设置 Mapbox accessToken
,它可以作为一个选项传入(自 v1.2 起)
const map = new mapboxgl.Map({
accessToken: '...',
container: '...',
style: '...',
});
遗憾的是,这不是任何示例中使用的方法(目前)。
文档:https://docs.mapbox.com/mapbox-gl-js/api/#map
1.2 发行说明:https://github.com/mapbox/mapbox-gl-js/releases/tag/v1.2.0
我将 mapbox-gl 库与 TypeScript 一起使用,并且我已经使用 @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;
...
这是我的代码:
import * as mapbox from 'mapbox-gl';
mapbox.accessToken = 'token';
版本!
"@types/mapbox-gl": "^0.35.0",
"typescript": "^2.3.4",
"mapbox-gl": "^0.37.0",
TypeScript hackery 说我可以将 mapbox 投射到任何一个,它会工作,但我很好奇这里的输入有什么问题。
这是我一直在使用的临时解决方法:
Object.getOwnPropertyDescriptor(mapboxgl, "accessToken").set('YOUR_TOKEN');
说明
由于对象被重新定义为使用自定义 setter,它将令牌放置在内部闭包中 - 我们可以直接调用 setter 函数,如示例所示。
再深入一点,我们可以看到 es6 模块根据定义是常量: https://github.com/Microsoft/TypeScript/issues/6751#issuecomment-177114001
然后我们可以做类似的事情:(mapboxgl as any).accessToken = ..
。这会起作用。
您也可以使用这种格式:
(mapboxgl as typeof mapboxgl).accessToken = ...
对于那些现在发现这个的人......你甚至不需要这样设置 Mapbox accessToken
,它可以作为一个选项传入(自 v1.2 起)
const map = new mapboxgl.Map({
accessToken: '...',
container: '...',
style: '...',
});
遗憾的是,这不是任何示例中使用的方法(目前)。
文档:https://docs.mapbox.com/mapbox-gl-js/api/#map
1.2 发行说明:https://github.com/mapbox/mapbox-gl-js/releases/tag/v1.2.0