ฉันใช้ mssql องสมุดซึ่งนี้ interface
:
export interface IRecordSet<T> extends Array<T> {
columns: IColumnMetadata;
toTable(name?: string): Table;
}
ฉันมีฟังก์ชันที่จะได้ข้อมูลจากฐานข้อมูลและจะได้ค่าเป็นตารางคู่ลำดับของ IRecordSet<T>
ดังนั้นนั่นเป็นอาเรย์ของ arrays ซึ่งมีคนประเภททั่วไป <T>
. นี่ดูเหมือนว่า:
[[{}, {}, ...], [{}, {}, ...], ...]
import { IRecordSet } from 'mssql'
type Data<T> = Array<IRecordSet<T>>
async function getData (sql: string): Promise<Data<any>> {
// connect to db, run sql
return []
}
ตอนนี้ฉันต้องการฟังก์ชันที่โทรมา getData()
และฉันอยากจะประเภทที่แท้จริงกลับหาข้อมูลโดยให้แก่คนพิมพ์ทั่วไป IRecordSet<T>
.
ฉันรู้ว่านี่มันไม่ทำงานแต่นี่คือสิ่งที่ฉันมีตอนนี้:
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]
// ...
}
TypeScript คือบอกว่า:
Type '[BookData, CarData]' is not assignable to type 'BookData'.
Type 'IRecordSet<[BookData, CarData]>' is not assignable to type 'CarData[]'.
ฉันเข้าใจว่าพวกนี้เกิดข้อผิดพลาดแต่ฉันไม่รู้ว่าต้องประเภทที่ myData
, firstBook
& cars
ตัวแปรใช้ส่วนเชื่อมต่อถูกกำหนด(BookData
& CarData
).
สิ่งที่ควร type BooksAndCars = Data<[BookData, CarData]>
เป็น..?