如何解决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
相关产品推荐
相关产品推荐

