The type.d.ts
@mailchimp/mailchimp_marketing 提供的文件没有库的类型,并且该包也没有 @types 包。因此有必要创建自己的来覆盖他提供的。
为此,创建文件夹@types/@mailchimp/mailchimp_marketing
(一个在另一个里面)并创建文件index.d.ts
inside mailchimp_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> => {}
}
}
}
SetListMemberBody
有更多的领域和setListMember
不是无效的,但我添加了我要使用的内容。为了发现这个字段和函数,我查看了源代码(https://github.com/mailchimp/mailchimp-marketing-node https://github.com/mailchimp/mailchimp-marketing-node)和 API 文档(https://mailchimp.com/developer/api/marketing/list-members/add-or-update-list-member/ https://mailchimp.com/developer/api/marketing/list-members/add-or-update-list-member/).
就我而言(Typescript 3.7.3)无需更改tsconfig.json
,但如果您使用旧版本,可能需要在 tsconfig.json 中为您的编译器选项添加“typeRoots”:
"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)
}