You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为link2aws编写TS类型声明后调用consoleLink报TypeError问题

问题现象

为link2aws库编写TypeScript类型声明文件用于Angular项目时,运行抛出错误:
TypeError: (new link2aws__WEBPACK_IMPORTED_MODULE_1__.ARN(...)).consoleLink is not a function

涉及的代码如下:

  • 导入语句
import { ARN } from 'link2aws';
  • 业务调用代码
arn = 'arn:aws:...'
let link = new ARN(arn).consoleLink();
  • 自定义的link2aws.d.ts类型文件
// Type definitions for link2aws
// Definitions by: me <url redacted> 

declare module 'link2aws' {
  class ARN {
    constructor(text: string);
    string(): string;
    console(): string;
    qualifiers(): string[];
    pathLast(): string;
    consoleLink(): string;
  }
}
报错原因

两个问题共同导致这个报错:

  • 导入方式错误:link2aws采用CommonJS规范默认导出ARN类,不存在名为ARN的命名导出。用命名导入的写法拿到的不是ARN类本身,实例化后的对象自然没有对应方法。
  • 类型声明和实际API不匹配:声明的consoleLink是方法,但实际link2aws的ARN实例上,consoleLink是字符串类型的getter属性,不需要加括号调用,强行当函数调用自然会抛出"不是函数"的错误。同时声明的string/console/qualifiers/pathLast也都是实例属性,不是方法。
修复方案

按以下步骤修改即可:

  • 调整TS配置,打开tsconfig.json将esModuleInterop字段设为true,修正导入语句为默认导入:
import ARN from 'link2aws';
  • 修正link2aws.d.ts类型声明,匹配库的实际导出结构和API:
declare module 'link2aws' {
  class ARN {
    constructor(text: string);
    string: string;
    console: string;
    qualifiers: string[];
    pathLast: string;
    consoleLink: string;
  }
  export default ARN;
}
  • 修正业务调用代码,去掉consoleLink后的调用括号,直接访问属性:
const arn = 'arn:aws:...';
const link = new ARN(arn).consoleLink;

内容的提问来源于stack exchange,提问作者Aurelia Peters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 21:27:38