@ types / mssql - 即使TS在正确的位置查找,也找不到连接池类型defs

时间:2018-03-14 00:01:05

标签: typescript typescript-types

我正在使用最新版本的temp = (message[0] << 8) | message[1];包和mssql包,而且我的typeRoots目录似乎已正确设置,但在尝试编译TypeScript代码时我一直收到这些错误:

@types/mssql

tsconfig似乎没问题,所以不确定发生了什么。有什么想法吗?

我总是可以删除@types库,但是在这里尝试保持最佳实践。

提前致谢。

编辑:以下是一些示例代码,它只是一个简单的SQL Server连接示例:

error TS2339: Property 'connect' does not exist on type 'typeof "c:/Users/blahblahblah/node_modules/@types/mssql/index"'.
error TS2339: Property 'query' does not exist on type 'typeof "C:/Users/blahblahblah/node_modules/@types/mssql/index"'

import * as sql from 'mssql' // test connection to SQL server using node-mssql const connectToSqlServer = (async (): Promise<void> => { try { const pool = await sql.connect(config) const result = await sql.query`select * from mock_people` console.dir(result) } catch (err) { console.error(err) } })() connect都有曲线。当我将鼠标悬停在query上时,它只显示sql而不是类型,但正如您从错误中看到的那样,TypeScript正在查找def类型的正确位置。

4 个答案:

答案 0 :(得分:2)

截至2019年9月,@ types / mssql软件包是不完整的资源。具体来说,如果您尝试采用异步/等待方式来管理连接,则类型包将不支持它,并且会出现打字错误。

我个人认为,用于连接数据库的async / await方法比带有回调的替代方法更容易编写。您可以从库中删除@ types / mssql以避免打字稿错误,或者在使用mssql包的其他功能时自己扩展类型。

答案 1 :(得分:0)

您尝试直接使用sql.connect,但看起来您应该使用sql.ConnectionPool.connecthttps://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mssql/index.d.ts#L193

所以你的代码应该看起来更像这样(我没有方便的mssql连接,所以这是未经测试的):

const connectToSqlServer = (async (): Promise<void> => {
  try {
    const pool = new sql.ConnectionPool(config);
    pool.connect().then(() => {
        const request = new sql.Request(pool);
        const result = await request.query(`select * from mock_people`);
        console.dir(result);
    });
  } catch (err) {
    console.error(err)
  }
})()

答案 2 :(得分:0)

我认为上述解决方案是正确的,但是需要一点纠正...

const connectToSqlServer = (async (): Promise<void> => {
  try {
    const pool = new sql.ConnectionPool('mssql://sa:myPassw0rd@192.168.1.10/BAMSDB')
    pool.connect().then(async () => {
      const request = new sql.Request(pool)
      const result = await request.query(`select * from mock_people`)
      console.dir(result)
    })
  } catch (err) {
    console.error(err)
  }
})()

答案 3 :(得分:0)

另一个解决方案是在 TypeScript 中扩充模块。添加mssql.d.ts

import sql from 'mssql'

declare module 'mssql' {
  function connect(connectionString: string): Promise<void>
  const query: sql.ConnectionPool['query']
  const close: sql.ConnectionPool['close']
}