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

如何解决JS转TypeScript时出现的@ts-expect-error ts-migrate(2571)报错

可行解决步骤

步骤1:定义数据库返回的股票记录结构

先根据你MongoDB中实际存储的字段,定义对应的TS接口:

interface StockRecord {
  stock_name: string;
  stock_value: number;
  percent_difference: number;
  // 如果day字段存储的是日期对象,类型改为Date即可
  day: string | number;
  // 有其他存储字段可在此补充对应的类型
}

步骤2:给查询方法添加明确的返回类型

修改findAllOcorrencesOrderByValue方法,指定返回的Promise类型,同时调用MongoDB集合方法时传入泛型约束文档结构:

// 明确方法返回值为包裹StockRecord数组的Promise
async findAllOcorrencesOrderByValue(my_investments_collection: string): Promise<StockRecord[]> {
  console.log("start findAllOcorrences")
  return new Promise(function(resolve, reject) {
    MongoDb.MongoClient.connect(url, function(err, db) {
      if (err) reject(err);
      var dbo = db?.db(database_name);
      var mysort:MongoDb.Sort = {  "day": -1, "percent_difference": -1 };
      // 给collection方法传入StockRecord泛型,指定该集合的文档类型
      dbo?.collection<StockRecord>(my_investments_collection)
        .find()
        .sort(mysort)
        .collation({locale: "en_US", numericOrdering: true})
        .toArray(function(err, result) {          
          if (err) reject(err);
          console.log(result);
          // 此时result类型会自动推断为StockRecord[]
          resolve(result)
          db?.close();
        });
    });
  });
}

步骤3:原调用代码无需额外修改即可自动识别类型

修改完方法后,all_ocorrencies会被TypeScript自动推断为StockRecord[]类型,unknown报错会直接消失,你还可以删掉forEach回调中element的any类型注解,获得完整的类型校验能力:

async function get_stocks_saved_on_database(request: any, response: any) {
  let mongoDatabaseStockOperations = new MongoDatabaseStockOperations()
  // 自动推断为StockRecord[]类型,无需手动加类型注解
  let all_ocorrencies = await mongoDatabaseStockOperations.findAllOcorrencesOrderByValue(Constants.STOCKS_REPORT_COLLECTION)

  all_ocorrencies.forEach((element) => {
    response.write(element.stock_name + " | " + element.stock_value + " | " + element.percent_difference + " | " + element.day + "\n")    
  });
  response.end()
}

临时过渡方案

如果你暂时不想定义完整的接口类型,可以直接给查询方法的返回值标注为Promise<any[]>,即可快速消除报错,但会失去后续的类型校验能力,仅适合短期临时使用。

内容的提问来源于stack exchange,提问作者fabiobh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:06:06