我创建了以下课程:
iScrollContainer
稍后在程序中,我尝试通过以下方式使用它:
class TestInput {
public a: boolean;
public b: boolean;
public c: boolean;
}
什么都不做,以后导致错误。在Chrome let template = new TestInput();
for (const key in template) {
if (template.hasOwnProperty(key)) {
template[key] = false;
}
}
中调试时似乎为空。
看看生成的JavaScript,我看到TestInput是通过以下方式定义的(有点空):
template
我在做什么错? 谢谢!
答案 0 :(得分:3)
即使声明了属性,也没有任何东西实际创建它们。仅当为其分配了值时,才会创建公共属性。
如果要确保始终创建它们,请在声明中包括一个初始化程序:
class TestInput {
public a: boolean = false;
public b: boolean = false;
public c: boolean = false;
}
或在构造函数中分配给它们,等等。
对于TypeScript的公共属性,这是正确的,但对于JavaScript自己的public field declarations(在Chrome的V8中现在没有任何标志,现在已交付)是不正确的。声明创建属性:
class TestInput {
a;
b;
c;
}
const t = new TestInput();
console.log("a" in t); // true
答案 1 :(得分:2)
这是预期的行为。类字段声明实际上对发出的Javascript没有任何作用。它们在那里只是用于类型检查。
如果将初始化程序添加到该字段,则该对象将具有预期的字段。
frmt= '%H:%M:%S'
df['column name'] = pd.to_datetime(df['column name'],format=frmt).dt.time
还有一个选项strictPropertyInitialization
用于检查所有属性是否已初始化(但需要class TestInput {
public a: boolean = false;
public b: boolean = false;
public c: boolean = false;
}
)
确保在构造函数中初始化未定义的类属性。此选项要求启用--strictNullChecks才能生效。