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



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

import mailchimp from "@mailchimp/mailchimp_marketing";

然而,它给出了以下错误:

type.d.ts不是模块

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

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

为此,创建文件夹@types/@mailchimp/mailchimp_marketing(一个在另一个内(,并在mailchimp_marketing内创建文件index.d.ts

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

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> => {}
}
}
}

SetListMemberBody有更多的字段,setListMember不是void,但我添加了我要使用的内容。为了发现这些字段和函数,我查看了源代码(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,但如果您使用旧版本,则可能需要添加";typeRoots";用于您的compilerTsconfig.json中的选项:

"compilerOptions": {
"typeRoots": ["@types", "node_modules/@types"]`
// other options
}

在所有这些之后,我正常地使用了库:

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)
}

将您的代码替换为:

const mailchimp = require("@mailchimp/mailchimp_marketing");

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

@mailchimp/mailchimp_marketing的类型同时可用。

使用
yarn add -D @types/mailchimp__mailchimp_marketing

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

编辑:类型似乎不完整。

由于@mailchimp/mailchimp_transactional也有类似的问题,我不得不用declare module创建自己的mailchimp__mailchimp_transactional.d.ts(这个包也只有types.d.ts,与mailchimp_marketing包中的types.d.ts不同,它几乎是空的(。

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

"compilerOptions": {
// other options here
"typeRoots": [
"@types",
"node_modules/@types"
]

mailchimp__mailchimp_transaction.d.ts

/* eslint-disable camelcase */
declare module '@mailchimp/mailchimp_transactional' {
...
}

快速&脏的解决方案是删除types.d.ts文件,这样可以防止出现错误,尽管您将不再获得API的任何类型信息。

最新更新