我正在使用最新版本的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类型的正确位置。
答案 0 :(得分:2)
截至2019年9月,@ types / mssql软件包是不完整的资源。具体来说,如果您尝试采用异步/等待方式来管理连接,则类型包将不支持它,并且会出现打字错误。
我个人认为,用于连接数据库的async / await方法比带有回调的替代方法更容易编写。您可以从库中删除@ types / mssql以避免打字稿错误,或者在使用mssql包的其他功能时自己扩展类型。
答案 1 :(得分:0)
您尝试直接使用sql.connect
,但看起来您应该使用sql.ConnectionPool.connect
:https://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']
}