我正在从httpclient的结果中序列化/映射数据,如下所示:
export class Foo {
constructor() {
this.bar = 0.00;
}
bar: number;
}
fromJson(json: any) : Foo {
const foo = new Foo();
foo.bar = json.bar;
return foo;
}
当我写console.log(typeof foo.bar)
时,我得到string
而不是number
。这是预期的结果吗,我真的需要输入强制转换foo.bar = parseInt(json.bar)
吗?
答案 0 :(得分:3)
当我编写console.log(typeof foo.bar)时,我得到的是字符串而不是数字。这是预期的结果
是的。 TypeScript不会为您插入转换代码。
...而且我真的需要输入强制转换foo.bar = parseInt(json.bar)吗?
这不是强制转换¹,但是,是的,如果您的起点不是数字,那么您确实需要转换为数字(parseInt
是做到这一点的一种方法-there are several,每个都有优点和缺点缺点-如果您的起点是字符串)。
¹实际上,TypeScript没有强制类型转换,它具有type assertions,这是相似但不同的。
答案 1 :(得分:0)
目前无法发表评论,但想与一个概念验证点共享一个Codepen: https://codepen.io/abarrenechea/pen/xQOqdX
class Foo {
constructor() {
this.bar = 0.00;
}
bar: number;
}
var foo1 = new Foo();
foo1.bar = "Hello";
var foo2 = new Foo();
foo2.bar = 10;
var foo3 = new Foo();
foo3.bar = true;
document.getElementById("foo1").innerHTML = foo1.bar + " | Type: " + typeof foo1.bar; // this is a string
document.getElementById("foo2").innerHTML = foo2.bar + " | Type: " + typeof foo2.bar; // this is a number
document.getElementById("foo3").innerHTML = foo3.bar + " | Type: " + typeof foo3.bar; // this is a boolean
如果需要保持应首先转换的类型,则将覆盖变量。