Je suis à l'aide de la mssql bibliothèque qui a cette interface
:
export interface IRecordSet<T> extends Array<T> {
columns: IColumnMetadata;
toTable(name?: string): Table;
}
J'ai une fonction qui récupère les données d'une base de données et renvoie un tableau de IRecordSet<T>
, de sorte que c'est un tableau de tableaux qui contiennent le type générique <T>
. Cela ressemble à:
[[{}, {}, ...], [{}, {}, ...], ...]
import { IRecordSet } from 'mssql'
type Data<T> = Array<IRecordSet<T>>
async function getData (sql: string): Promise<Data<any>> {
// connect to db, run sql
return []
}
Maintenant, j'ai besoin d'une fonction qui appelle getData()
et j'aimerais le type réel de données retourné en fournissant le type générique dans IRecordSet<T>
.
Je sais que cela ne fonctionne pas, mais c'est ce que j'ai en ce moment:
interface BookData {
name: string
author: string
}
interface CarData {
make: string
model: string
}
type BooksAndCars = Data<[BookData, CarData]>
async function getBooksAndCars (): Promise<void> {
const myData: BooksAndCars = await getData(`
SELECT name, author FROM Books;
SELECT make, model FROM Cars;
`)
const firstBook: BookData = myData[0][0]
const cars: CarData[] = myData[1]
// ...
}
Tapuscrit est en disant:
Type '[BookData, CarData]' is not assignable to type 'BookData'.
Type 'IRecordSet<[BookData, CarData]>' is not assignable to type 'CarData[]'.
Je comprends que ces erreurs, mais je ne sais pas comment le type le myData
, firstBook
& cars
des variables en utilisant les interfaces définies (BookData
& CarData
).
Ce qui devrait type BooksAndCars = Data<[BookData, CarData]>
être..?