You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:15:18