如何解决TypeScript中DocuSign SDK的'EnvelopeDefinition不存在'错误?
TypeScript中使用DocuSign eSignature SDK的类型错误排查与解决
错误信息
在TypeScript项目中使用DocuSign eSignature SDK时,遇到以下类型错误:
Property 'EnvelopeDefinition' does not exist on type 'typeof import("c:/Users/USER/Desktop/docusign/node_modules/@types/docusign-esign/index")'.ts(2339) Property 'Tabs' does not exist on type 'typeof import("c:/Users/USER/Desktop/docusign/node_modules/@types/docusign-esign/index")'.ts(2339)
出错代码
错误出现在以下TypeScript函数中:
function makeEnvelope(name: string, email: string, company: string): docusign.EnvelopeDefinition { const env = new docusign.EnvelopeDefinition(); // Error here env.templateId = process.env.TEMPLATE_ID!; const text = new docusign.Text(); text.tabLabel = "company_name"; text.value = company; const tabs = new docusign.Tabs(); // Error here tabs.textTabs = [text]; const signer1 = new docusign.TemplateRole(); signer1.email = email; signer1.name = name; signer1.tabs = tabs; signer1.clientUserId = process.env.CLIENT_USER_ID!; signer1.roleName = 'Applicant'; env.templateRoles = [signer1]; env.status = "sent"; return env; }
已尝试的操作
- 通过
npm install docusign-esign确保DocuSign eSignature SDK安装正确 - 检查
@types/docusign-esign包已安装且为最新版本 - 验证已正确导入模块:
import * as docusign from 'docusign-esign';
错误原因
DocuSign eSignature SDK的TypeScript类型定义中,EnvelopeDefinition、Tabs这类实体类并非直接挂载在顶层导出对象上,而是嵌套在docusign命名空间下的models属性中,旧的直接访问方式不符合当前类型定义的结构。
解决方法
方法1:通过models属性访问类
修改代码中创建实例的路径,从docusign.models下获取对应类:
function makeEnvelope(name: string, email: string, company: string): docusign.EnvelopeDefinition { const env = new docusign.models.EnvelopeDefinition(); // 修正此处 env.templateId = process.env.TEMPLATE_ID!; const text = new docusign.models.Text(); // 修正此处 text.tabLabel = "company_name"; text.value = company; const tabs = new docusign.models.Tabs(); // 修正此处 tabs.textTabs = [text]; const signer1 = new docusign.models.TemplateRole(); // 修正此处 signer1.email = email; signer1.name = name; signer1.tabs = tabs; signer1.clientUserId = process.env.CLIENT_USER_ID!; signer1.roleName = 'Applicant'; env.templateRoles = [signer1]; env.status = "sent"; return env; }
方法2:解构导入所需类
如果不想重复书写models,可以直接解构导入需要的类:
import { EnvelopeDefinition, Text, Tabs, TemplateRole } from 'docusign-esign'; function makeEnvelope(name: string, email: string, company: string): EnvelopeDefinition { const env = new EnvelopeDefinition(); env.templateId = process.env.TEMPLATE_ID!; const text = new Text(); text.tabLabel = "company_name"; text.value = company; const tabs = new Tabs(); tabs.textTabs = [text]; const signer1 = new TemplateRole(); signer1.email = email; signer1.name = name; signer1.tabs = tabs; signer1.clientUserId = process.env.CLIENT_USER_ID!; signer1.roleName = 'Applicant'; env.templateRoles = [signer1]; env.status = "sent"; return env; }
额外验证步骤
若修改后仍有问题,可执行以下操作确保依赖正常:
- 删除
node_modules文件夹和package-lock.json(或yarn.lock) - 重新执行
npm install - 重启TypeScript语言服务(VS Code中可按
Ctrl+Shift+P,选择"TypeScript: Restart TS Server")
内容的提问来源于stack exchange,提问作者SMTP King
相关产品推荐
相关产品推荐

