打字稿:尝试添加两个变量,但得到两个变量的连接

Nac*_*ene 16 javascript addition typescript

我的Typescript类中有三个变量:

A:number;
B:number;
C:number;
Run Code Online (Sandbox Code Playgroud)

在该类的另一部分,我尝试添加两个变量A和B:

this.C = this.A+this.B; // A =20 and B = 50;
Run Code Online (Sandbox Code Playgroud)

我在html模板中显示C.

<span>{{C}}</span>
Run Code Online (Sandbox Code Playgroud)

我的问题是,而不是添加TWO变量(20+50=70)我得到连接(2050)!

有谁可以帮助我吗 ?

更新:

以下是导致问题的确切代码部分:

goTo(page:number,type:script) {
    //    
    this.pageFirstLineNumber = page;
    this.pageLastLineNumber = page + this.LINE_OFFSET; //concatenation!!
}
Run Code Online (Sandbox Code Playgroud)

请注意,pageLastNumber被声明为数字类型,LINE_OFFSET是olso数字类型,我找到了解决此问题但是typescript编译器输出错误(禁止eval):

////
....
this.pageFirstLineNumber = eval(page.toString()); // now It works !!
this.pageLastLineNumber = page + this.LINE_OFFSET; //concatenation!!
Run Code Online (Sandbox Code Playgroud)

UPDATE

这是LINE_OFFSET变量的声明:

private _calculateOffset(fontSize: number) {
    let linesDiff = (fontSize * 27) / 14;
    let lines:number = 27 - (linesDiff - 27);
    this.LINE_OFFSET = Math.floor(lines);
    if (fontSize >= 17 && fontSize <= 20) {
        this.LINE_OFFSET += (Math.floor(fontSize / 3) - 2);
    }
    if (fontSize > 20 && fontSize <= 23) {
        this.LINE_OFFSET += (Math.floor(fontSize / 2) - 2);
    }
    if (fontSize > 23 && fontSize <= 25) {
        this.LINE_OFFSET += (Math.floor(fontSize / 2));}
    if (fontSize > 25 && fontSize <= 27) {
        this.LINE_OFFSET += (Math.floor(fontSize / 2) + 1);
    }
    if (fontSize > 27 && fontSize <= 30) {
        this.LINE_OFFSET += (Math.floor(fontSize / 2) + 4);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ado 20

用+前面加上数字:

let a = +b + +c;
Run Code Online (Sandbox Code Playgroud)

REF

  • 我不知道为什么OP不选择这个简单的解决方案。可能不太实用? (2认同)

Nit*_*mer 16

当您在接口中声明属性为a时number,它仅作为声明保留,它将不会被转换为javascript.

例如:

interface Response {
    a: number;
    b: number;
}

let jsonString = '{"a":"1","b":"2"}';
let response1 = JSON.parse(jsonString) as Response;

console.log(typeof response1.a); // string 
console.log(typeof response1.b); // string
console.log(response1.a + response1.b); // 12
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,json具有ab作为字符串而不是数字,并将它们声明为接口中的数字对运行时结果没有影响.

如果从服务器获得的内容被编码为字符串而不是数字,那么您需要转换它们,例如:

let response2 = {
    a: Number(response1.a),
    b: Number(response1.b)
} as Response;

console.log(typeof response2.a); // number 
console.log(typeof response2.b); // number
console.log(response2.a + response2.b); // 3
Run Code Online (Sandbox Code Playgroud)

(操场上的整个代码)