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

如何解决TypeScript中值用作类型的赋值错误?

问题解决思路

首先,报错的核心原因是TypeScript里值和类型是完全分离的:你写的widgett是一个运行时的对象值,不能直接拿来当作类型注解使用,这就是报错提示让你用typeof widgett的原因——typeof操作符在类型上下文里可以取到对应值的类型。

但你的实际需求是让factory返回Widget类的实例,所以不需要用widgett,直接用Widget作为类型即可(在TypeScript中,类本身既可以作为运行时的构造函数值,也可以作为编译时的实例类型)。

修正后的代码

const widgett = {};
class Widget {
  constructor() {
    console.log('wi');
  }
}
function Widget2() {
  console.log('wi');
}

// 修正类型注解,同时补全返回值
function logDec(factory: () => Widget): () => Widget {
  return () => {
    console.log(123);
    // 这里要return factory(),否则返回undefined,不符合类型约定
    return factory();
  };
}

关键说明

  • 把类型注解里的widgett换成Widget:() => Widget表示这个函数返回Widget类的实例,完全符合你的需求。
  • 原代码中返回的函数里只执行了factory()但没返回,会导致实际返回undefined,违反类型约定,所以要加上return。
  • 如果你确实需要引用某个值的类型(比如想让factory返回和widgett同类型的对象),才需要用typeof widgett,比如:factory: () => typeof widgett。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:30:48