错误“不能将 'new' 与类型缺少调用或构造签名的表达式一起使用。”导入 Esri 类型时

Posted

技术标签:

【中文标题】错误“不能将 \'new\' 与类型缺少调用或构造签名的表达式一起使用。”导入 Esri 类型时【英文标题】:Error "Cannot use 'new' with an expression whose type lacks a call or construct signature." when importing Esri types错误“不能将 'new' 与类型缺少调用或构造签名的表达式一起使用。”导入 Esri 类型时 【发布时间】:2018-02-09 22:51:02 【问题描述】:

我觉得这里缺少一些非常简单的东西。我正在构建一个使用 Esri ArcGIS API 的类,但是当我从 arcgis-js-apid.ts 文件中导入类型定义时,我收到打字稿错误“不能使用‘新’和表达式其类型缺少调用或构造签名。”

例如:

import * as IMap from 'esri/Map';

export class Foo 
    bar: (Map: IMap) 
        const map = new Map(); // <-- error here
    

d.ts 文件中的相关 sn-ps:

declare namespace __esri 
    /* snip */
    interface Map extends Accessor, LayersMixin 
        allLayers: Collection;
        basemap: Basemap;
        ground: Ground;
    

    interface MapConstructor 
        new(properties?: MapProperties): Map;
    

    export const Map: MapConstructor;
    /* snip */


declare module "esri/Map" 
    import Map = __esri.Map;
    export = Map;

看起来类型定义对我来说是正确的,那么我做错了什么会让 Typescript 认为 IMap 类型没有构造函数?

【问题讨论】:

【参考方案1】:

参数中的MapIMap 类型的一个实例。如果您想将其键入为构造函数,请将其键入为typeof IMap

bar (Map: typeof IMap) 
    const map = new Map(); 

【讨论】:

以上是关于错误“不能将 'new' 与类型缺少调用或构造签名的表达式一起使用。”导入 Esri 类型时的主要内容,如果未能解决你的问题,请参考以下文章

TS2351:不能将“new”与类型缺少调用或构造签名的表达式一起使用。角度 8

远程服务器返回错误: 404错误远程服务器返回错误:500错误 HttpWebResponse远程服务器返回错误:(404500) 错误。

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

错误精灵错误跟踪器错误