gpt4 book ai didi

mysql - 如何对 globalThis 下的对象使用自定义类型?

转载 作者:行者123 更新时间:2023-11-29 09:32:11 35 4
gpt4 key购买 nike

问题

我正在使用 mysql 构建一个 TypeScript Express 应用程序。初始化数据库连接池 const pool = mysql.createPool(...) 后,我想将创建的 Pool 对象附加到 globalThis.pool这样我就可以在其他地方访问它。

但是这样做会导致类型错误:

Element implicitly has an 'any' type because type 'typeof globalThis' has no index signature.

经过一番研究,我发现我需要在 d.ts 文件中全局声明 pool,所以我在 global.d.ts 中执行此操作:

声明变量池:any;

但是我立即注意到,这样做我失去了自动完成功能,因为我将 globalThis.pool 设置为 any 类型。然后我将声明更改为

import Pool from "mysql/lib/Pool";
declare var pool: Pool;

但这会停用我的 global.d.ts 文件,就好像它不存在一样,并且我再次遇到第一个类型错误。

我期望它如何工作

能够为全局变量分配类型

declare var pool: Pool;

问题

在 TS 中定义全局变量的正确方法是什么?我不想使用任何 IOC 框架,因为这应该是一个小而简单的项目。

最佳答案

这是由于 Pool 类型没有索引签名(我猜您已经从错误中猜到了这一点)。这几乎意味着,如果您访问任何未在 Pool 中专门键入的属性,都会被视为 any

如果您像这样输入 global.d.ts:

import Pool from "mysql/lib/Pool";
declare var pool: Pool; // pool already has the type 'Pool', this does exactly nothing

那么你只是告诉 TypeScript 它已经知道的事情:poolPool 类型。您所要做的就是添加自定义字段,该字段不是专门在 Pool 中键入的。

import Pool from "mysql/lib/Pool";

// Either add an index signature
declare var pool: Pool & {[key:string]: PoolInstance}; // On the right hand, use the type that Pool instance has

// or add all your custom fields specifially (this is preferred because of stronger typing)

declare var pool: Pool & {pool: PoolInstance}; // Same here, use the type that Pool instance has

由于我不熟悉 Pool 类型,因此我使用 PoolInstance 作为 mysql.createPool(... ) 返回。

关于mysql - 如何对 globalThis 下的对象使用自定义类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464064/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com