gpt4 book ai didi

typescript - 类型 'any' 不是构造函数类型

转载 作者:行者123 更新时间:2023-12-04 00:37:05 25 4
gpt4 key购买 nike

我正在尝试在 Typescript 中实现一个类装饰器。所以我有一个将类作为参数的函数。

const decorate = function ()
{
return function ( target: any )
{
return class myExtendClass extends target{}
};
};

目标是像这样使用它:

@decorate()
class Something{}

不幸的是,我收到type any is not a constructor function type。知道如何实现我想要的吗?

最佳答案

my question is why this code doesnt work, since its valid js

这取决于您所说的不起作用是什么意思。

生成的 javascript 有效并且可以工作。但是 TypeScript 更严格,如果您编写不符合 TS 规则的代码,它会提示,尽管它通常会很好地运行并为您提供编译后的 js。

您尝试做的问题是 TS 不支持通过装饰器扩展类。它将生成有效的 js,但 TS 不了解您执行此操作时发生的情况。

例如:

const decorate = () => (target: typeof Cat) =>
{
return class Lion extends target
{
public Roar = () => console.log("Roaar")
}
}

@decorate()
class Cat
{
public Purr = () => console.log("Purr purr");
}

var lion = new Cat();
lion.Roar(); // Error in TypeScript but working in js

当你运行它时它会工作,但是 TS 不明白你在装饰器中做什么,所以它不知道类 Cat 实际上是一个 Lion.

有一个feature request关于让 TS 理解装饰器中的类突变,但目前不支持。

我建议您避免像这样在装饰器中改变类。即使它可行,我也看不到你现在的例子的意义,它不是很直观,如果你希望所有 Something 都具有某些属性,你可以直接扩展它: 扩展了 MyReusableProperties

关于typescript - 类型 'any' 不是构造函数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com