TypeScript中gm.ImageInfo的Format类型不匹配,如何正确获取数组?
解决GraphicsMagick for Node.js中多页PDF的Format类型冲突问题
在处理多页PDF时,gm的TypeScript类型定义里Format被标注为string,但实际返回的是string[],导致类型冲突。可以用以下几种方法解决:
方法1:类型断言(快速解决)
直接通过类型断言将Format转为string[],用unknown中转是更安全的做法,避免类型断言的风险:
import gm from 'gm'; gm('test.pdf').identify((err: any, value: gm.ImageInfo) => { if (err) { console.log('err'); return; } const formatArray = value.Format as unknown as string[]; console.log(formatArray); console.log(`页数:${formatArray.length}`); });
方法2:自定义类型(适合复用场景)
创建一个继承自gm.ImageInfo的自定义接口,重写Format的类型为string[],这样解构时不会触发TypeScript报错:
import gm from 'gm'; // 自定义多页PDF的信息类型 interface MultiPagePDFInfo extends Omit<gm.ImageInfo, 'Format'> { Format: string[]; } gm('test.pdf').identify((err: any, value: MultiPagePDFInfo) => { if (err) { console.log('err'); return; } const { Format } = value; console.log(Format); console.log(`页数:${Format.length}`); });
方法3:运行时类型检查(健壮性更高)
增加运行时判断,兼容单页PDF返回string、多页返回string[]的情况,避免潜在的运行时错误:
import gm from 'gm'; gm('test.pdf').identify((err: any, value: gm.ImageInfo) => { if (err) { console.log('err'); return; } const formatArray = Array.isArray(value.Format) ? value.Format : [value.Format]; console.log(formatArray); console.log(`页数:${formatArray.length}`); });
内容的提问来源于stack exchange,提问作者bassman21
相关产品推荐
相关产品推荐

