在typescript中,当我用数据初始化一个对象时,它不包含方法。但是当我将它初始化为对象时,它包含了一些方法。为什么会这样呢?请参见下面的示例。
let a = {a: 12, b: false}
class Data {
private a: Number;
private b: Boolean;
print() {
console.log('Default print')
}
}
let x: Data = a;
x.print
let y: Data = new Data()
y.print()
变量y
包含print()方法。但x
并非如此。
发布于 2020-07-22 17:23:24
print()
是您的类的方法,而不是x
所在作用域的静态方法。
通过将y
赋值给new Data()
,可以将其初始化为Data
类的实例,这样它就可以访问print()
方法。
使用x
不能做到这一点;您将告诉TypeScript编译器x
的类型应该是Data
,然后将其赋给与该类型不匹配的对象文字。因此,上面的代码抛出一个类型错误:TS2741 [ERROR]: Property 'print' is missing in type '{ a: number; b: boolean; }' but required in type 'Data'. let x: Data = a;
您赋予变量的TypeScript类型不会影响该变量的实际值,如果分配给它的值与给定的类型不匹配,它只会抛出类型错误。
TS文档中the Type Annotations section的最后两段可能有助于澄清。你的代码仍然会被编译成JavaScript并运行,只是可能不是你所期望的那样。但是,在使用tsc
进行编译时,您应该仍然会看到类型错误。
https://stackoverflow.com/questions/63039127
复制