typescript - @types/mssql - kan inte hitta typdefinitioner för anslutningspoolen trots att TS letar på rätt plats
Jag använder de senaste versionerna av mssql-paketet och @types/mssql-paketet, och min typeRoots-katalog verkar vara korrekt inställd, men jag fortsätter att få dessa fel när jag försöker kompilera TypeScript-koden:
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"'
Tsconfig verkar vara okej, så jag är inte säker på vad som pågår. Några idéer?
Jag kan alltid bara ta bort @types-biblioteket, men försöker hålla mig till bästa praxis här.
Tack i förväg.
REDIGERA: Här är lite exempel på kod, det är bara ett enkelt SQL Server-anslutningsexempel:
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)
}
})()
både connect och query har vågstreck under sig. När jag hovrar över sql visar det bara import sql istället för typen, men som du kan se från felet, letar TypeScript på rätt ställe efter typdefinitionen.
Svar #1
Du försöker använda sql.connect direkt men det ser ut som att du bör använda sql.ConnectionPool.connect: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mssql/index.d.ts#L193
Så din kod bör se mer ut så här (jag har ingen mssql-anslutning till hands, så detta är otestat):
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)
}
})()
Svar #2
En annan lösning är att förstärka modulen i TypeScript. Lägg till 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']
}
