我写了这段代码
interface Foo {
abcdef: number;
}
let x: Foo | string;
if (x instanceof Foo) {
// ...
}
'Foo' only refers to a type, but is being used as a value here.
instanceOf
使用类,而不是接口。
问题在于instanceof
是来自JavaScript的构造,而在JavaScript中,instanceof
需要右侧操作数的值。具体来说,在x instanceof foo
中,JavaScript将执行运行时检查,以查看foo.prototype
是否存在于x
的原型链中的任何位置。
但是,在TypeScript中,接口
没有发出。这意味着foo
和foo.prototype
在运行时都不存在,因此这段代码肯定会失败。
您可能想从接口
切换到类
,但您应该意识到,在Typescript的结构类型系统中(其中的内容主要基于形状),可以生成与给定类形状相同的任何对象:
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
// Works!
x = y;
y = x;
在本例中,您有X
和Y
,它们具有相同的类型,但是如果您尝试在其中一个上使用instanceof
,您将在另一个上得到相反的结果。因此,instanceOf
不会真正告诉您关于类型的很多信息,如果您正在利用typescript中的结构类型的话。
我在一个。tsx文件中用Typescript和Material-ui编写一个ReactJS类。在我的一个自定义组件中,我希望创建一个对我在自定义组件中使用的组件之一的引用。 在编译过程中,我在引用的声明上得到一个错误:
在第一个if检查中,我没有得到一个错误,在else检查中,如果我得到 VideoSource仅指一种类型,但在此处用作值。
我使用TypeScript,并有一个情况下,一个函数返回两个类型的联合。它可以返回字符串或模型,但我不知道如何获取类型并根据返回的类型执行操作。 我该怎么做这样的事?在本例中,字符串和IMyModel如何用作值(如错误消息所示)?这个错误使我感到困惑。 我在使用的行中得到以下可视化工作室代码中的静态错误: “string”仅引用类型,但在此处用作值。ts(2693) “IMyModel”仅引用类型
我正在试图找出如何告诉react哪个元素被用作ref例如在我的例子中 是来自第三方库的SVG组件,以这种方式定义它会导致错误 是否有某种通用的方法来定义哪个元素是ref?
我试图为我的AWS Lambda使用Typescript,我在使用promise时遇到了以下错误。 我尝试在代码中使用以下变体 我尝试了I Get中提到的解决方案:[ts]'Promise'只引用类型,但在这里被用作值,但没有运气。
我使用sqlite创建的数据类型是dateTime(createTime/ updateTime),例如:2024-06-04 11:32:59 但是我想要typescript使用interface给暴露出去类型,请问这里使用什么类型呢? 我这里打只能打出Date,不知道是否和sliqte的datetime匹配: