मैं का उपयोग कर रहा हूँ mssql पुस्तकालय है जो इस interface
:
export interface IRecordSet<T> extends Array<T> {
columns: IColumnMetadata;
toTable(name?: string): Table;
}
मैं एक समारोह है कि एक डेटाबेस से डेटा और रिटर्न की एक सरणी IRecordSet<T>
, तो यह है कि सरणियों की एक सरणी के होते हैं, जो सामान्य प्रकार <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]
// ...
}
टाइपप्रति कह रहा है:
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]>
हो सकता है..?