From ffe030fee4519f000fa31225c78b7f555cefa1f4 Mon Sep 17 00:00:00 2001 From: Alex von Brandenfels Date: Wed, 26 Mar 2025 19:12:23 +0000 Subject: [PATCH] Accept readonly array inputs This changes some type definitions so that sheetjs accepts readonly arrays in places where it's not mutating the array anyway. For example, without this change, the following code would not compile: ``` const myData: ReadonlyArray<{ col1: string, col2: string}> = [{ col1: 'a', col2: 'b' }]; const myWorksheet = utils. json_to_sheet(myData); ``` This theoretically should work - sheetjs isn't mutating the myData array anyway, so it should accept a readonly array as input. Signed-off-by: Alex von Brandenfels --- packages/s/src/xlsx.d.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/s/src/xlsx.d.ts b/packages/s/src/xlsx.d.ts index 2a13f78..b78cca3 100644 --- a/packages/s/src/xlsx.d.ts +++ b/packages/s/src/xlsx.d.ts @@ -618,7 +618,7 @@ export interface Sheet2HTMLOpts { export interface Sheet2JSONOpts extends DateNFOption { /** Output format */ - header?: "A"|number|string[]; + header?: ReadonlyArray<"A"|number|string>; /** Override worksheet range */ range?: any; @@ -645,7 +645,7 @@ export interface SheetAOAOpts extends AOA2SheetOpts, OriginOption {} export interface JSON2SheetOpts extends CommonOptions, DateNFOption { /** Use specified column order */ - header?: string[]; + header?: ReadonlyArray; /** Skip header row in generated sheet */ skipHeader?: boolean; @@ -672,12 +672,12 @@ export interface XLSX$Utils { /* --- Import Functions --- */ /** Converts an array of arrays of JS data to a worksheet. */ - aoa_to_sheet(data: T[][], opts?: AOA2SheetOpts): WorkSheet; - aoa_to_sheet(data: any[][], opts?: AOA2SheetOpts): WorkSheet; + aoa_to_sheet(data: ReadonlyArray>, opts?: AOA2SheetOpts): WorkSheet; + aoa_to_sheet(data: ReadonlyArray>, opts?: AOA2SheetOpts): WorkSheet; /** Converts an array of JS objects to a worksheet. */ - json_to_sheet(data: T[], opts?: JSON2SheetOpts): WorkSheet; - json_to_sheet(data: any[], opts?: JSON2SheetOpts): WorkSheet; + json_to_sheet(data: ReadonlyArray, opts?: JSON2SheetOpts): WorkSheet; + json_to_sheet(data: ReadonlyArray, opts?: JSON2SheetOpts): WorkSheet; /** BROWSER ONLY! Converts a TABLE DOM element to a worksheet. */ table_to_sheet(data: any, opts?: Table2SheetOpts): WorkSheet; @@ -768,12 +768,12 @@ export interface XLSX$Utils { sheet_set_array_formula(ws: WorkSheet, range: Range|string, formula: string): WorkSheet; /** Add an array of arrays of JS data to a worksheet */ - sheet_add_aoa(ws: WorkSheet, data: T[][], opts?: SheetAOAOpts): WorkSheet; - sheet_add_aoa(ws: WorkSheet, data: any[][], opts?: SheetAOAOpts): WorkSheet; + sheet_add_aoa(ws: WorkSheet, data: ReadonlyArray>, opts?: SheetAOAOpts): WorkSheet; + sheet_add_aoa(ws: WorkSheet, data: ReadonlyArray>, opts?: SheetAOAOpts): WorkSheet; /** Add an array of JS objects to a worksheet */ - sheet_add_json(ws: WorkSheet, data: any[], opts?: SheetJSONOpts): WorkSheet; - sheet_add_json(ws: WorkSheet, data: T[], opts?: SheetJSONOpts): WorkSheet; + sheet_add_json(ws: WorkSheet, data: ReadonlyArray, opts?: SheetJSONOpts): WorkSheet; + sheet_add_json(ws: WorkSheet, data: ReadonlyArray, opts?: SheetJSONOpts): WorkSheet; consts: XLSX$Consts;