@mailchimp/mailchimp_marketing/types.d.ts' 不是 nodeJs 中的模块

chi*_*ika 6 node.js mailchimp

我在我的 NodeJS 应用程序中导入了 import @mailchimp/mailchim_marketing:

import mailchimp from "@mailchimp/mailchimp_marketing";
Run Code Online (Sandbox Code Playgroud)

但是,它给出了以下错误:

type.d.ts 不是模块

我已经搜索过是否有@types/@mailchimp/mailchimp_marketing 但我看不到它。

Vic*_*sis 9

type.d.ts@mailchimp/mailchimp_marketing 提供的文件没有库的类型,包也没有@types 包。所以有必要创建自己的来覆盖他提供的。

为此,请创建文件夹@types/@mailchimp/mailchimp_marketing(一个在另一个文件夹中)并index.d.tsmailchimp_marketing.

该文件必须包含模块的声明,以及您将从库中使用的函数和类型。就我而言:

declare module '@mailchimp/mailchimp_marketing' {
  type Config = {
    apiKey?: string,
    accessToken?: string,
    server?: string
  }

  type SetListMemberOptions = {
    skipMergeValidation: boolean
  }

  export type SetListMemberBody = {
    email_address: string,
    status_if_new: 'subscribed' | 'unsubscribed' | 'cleaned' | 'pending' | 'transactional'
    merge_fields?: {[key: string]: any}
  }

  export default {
    setConfig: (config: Config) => {},
    lists: {
      setListMember: (listId: string, subscriberHash: string, body: SetListMemberBody, opts?: SetListMemberOptions): Promise<void> => {}
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

SetListMemberBody有更多的字段并且setListMember不是空的,但我添加了我要使用的内容。为了发现这些字段和功能,我查看了源代码(https://github.com/mailchimp/mailchimp-marketing-node)和 api 文档(https://mailchimp.com/developer/api/marketing/list-members /add-or-update-list-member/)。

在我的情况下(Typescript 3.7.3)不需要更改tsconfig.json,但如果您使用旧版本,则可能需要在 tsconfig.json 中为您的 compilerOptions 添加“typeRoots”:

"compilerOptions": {
  "typeRoots": ["@types", "node_modules/@types"]`
  // other options
}
Run Code Online (Sandbox Code Playgroud)

毕竟,我正常使用了该库:

import mailchimp, { SetListMemberBody } from '@mailchimp/mailchimp_marketing'
import crypto from 'crypto'

mailchimp.setConfig({
  apiKey: process.env.MAILCHIMP_KEY,
  server: 'serverHere',
});

const listId = 'listIdHere'

export const addSubscriber = async (member: SetListMemberBody): Promise<void> => {
  const hash = crypto.createHash('md5').update(member.email_address).digest('hex')
  await mailchimp.lists.setListMember(listId, hash, member)
}
Run Code Online (Sandbox Code Playgroud)


ben*_*oam 8

将您的代码替换为:

const mailchimp = require("@mailchimp/mailchimp_marketing");
Run Code Online (Sandbox Code Playgroud)

是的,你不会有类型安全,但至少你的代码可以工作。


小智 6

@mailchimp/mailchimp_marketing同时提供 的类型。

使用
yarn add -D @types/mailchimp__mailchimp_marketing

npm install --save-dev @types/mailchimp__mailchimp_marketing
安装 types 包。

编辑:类型似乎不完整。


Ana*_*oly 2

遇到类似的问题,@mailchimp/mailchimp_transactional我必须创建自己的mailchimp__mailchimp_transactional.d.tsdeclare module这个包也有,而且与in包types.d.ts不同,它几乎是空的)。types.d.tsmailchimp_marketing

因此,您可以使用它们的类型创建自己的类型描述文件types.d.ts,将其放置在@types项目的文件夹中并添加@typestsconfig.json如下所示:

  "compilerOptions": {
    // other options here
    "typeRoots": [
      "@types",
      "node_modules/@types"
    ]
Run Code Online (Sandbox Code Playgroud)

mailchimp__mailchimp_transactional.d.ts

/* eslint-disable camelcase */
declare module '@mailchimp/mailchimp_transactional' {
...
}
Run Code Online (Sandbox Code Playgroud)