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

如何创建返回参数相同类型的Typescript透传日志函数?

实现保留参数类型的NetSuite日志函数

要让日志函数返回与传入参数完全一致的类型,核心是用TypeScript泛型绑定参数和返回值的类型,替代原来的unknown参数类型。这样既能保留类型检查能力,又不需要额外的类型转换。

修改后的代码

import * as Nlog from "N/log";  // NetSuite日志模块定义

declare const log : typeof Nlog;  // 全局日志方法

export const L = <T>(details: T, options : { title? : string; method?: keyof typeof log | 'skip' } = {}) : T => {
  const { title, method } = {
    title : 'auto-logging',
    method : 'debug',
    ...options
  };

  if (method === 'skip' || typeof Nlog[method] !== 'function') return details;

  try {
    log[method]({ title, details });
  } catch (e) {
    log.error({
      title : 'error in auto-logging',
      details : e
    });
  }

  return details;
};

关键改动说明

  • 新增泛型<T>:用来捕获传入details参数的具体类型,让TypeScript能跟踪该类型并同步到返回值上
  • 参数details类型从unknown改为T,返回类型从typeof details改为T:直接绑定参数与返回值的类型,确保两者完全一致
  • 原有日志逻辑保持不变:默认参数、日志方法校验、异常处理等功能不受影响

使用效果

内联调用时,返回值会自动继承传入参数的类型,无需手动转换:

const user = { id: 123, name: 'John' };
const loggedUser = L(user); // loggedUser自动拥有{ id: number; name: string }类型

此时TypeScript会正常进行类型检查,避免了any导致的类型安全问题,也不用像unknown那样额外做类型断言。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:35:19