Typescript:推入对象将数字转换为字符串

b4lqfgs4  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(234)

我正在使用Typescript(IONIC/Angular应用程序),我正在将一个带有默认值的对象推入数组,但数字类型的变量被转换为字符串。
我的类型接口是

export interface HintsType {
    revealed?: boolean;
    type: 'string' | 'image';     
    value: any;                
    timeInterval?: number;    
}

export interface TestPieceInfo {
    seqNum: number;
    title: string;
    type: PieceTypes;
    answer: string;
    mainText: string;
    hints: HintsType[];
}

private piece: TestPieceInfo[]

code:

    addHint() {
    console.log('BEGIN addHint:);
    this.piece.hints.push({
      revealed: false,
      type: 'string',
      value: '',
      timeInterval: 5,
    });

    console.log('END of addHint: piece=', typeof this.piece.hints[0].timeInterval, this.piece.hints);
  }

当代码运行时,我的console.log显示数组中存储了正确的信息,并且timeInterval的类型是“number”,但是当它作为this.piece.hints数组的一部分显示时,timeInterval显示为一个字符串,用引号括起来,显示为“5”。然后,当它被放入数据库(Google Firestore)时,它被存储为字符串而不是数字。

console.log output:
END of addHint: piece= **number ** [{…}]
0: 
revealed: false
timeInterval: "5"
type: "string"
value: ""

[[Prototype]]: Objectlength: 1[[Prototype]]: Array(0)

我试过很多方法:

(1). .push({
      revealed: false,
      type: 'string',
      value: '',
      timeInterval: 5 as number
      })

(2). .push({
      revealed: false,
      type: 'string',
      value: '',
      timeInterval: 5 + 0
      })

(3). .push({
revealed: false,
type: 'string',
value: '',
timeInterval: null
})
this.piece.hints[this.piece.hints.length-1].timeInterval = 5


在每种情况下,timeInterval属性都将变为字符串而不是数字.
s4n0splo

s4n0splo1#

没关系。经过反复的调查,我发现了问题所在。
我的数据变量'hints.timeInterval'被绑定到一个带有

[(ngModel)]="hints[i].timeInterval"

html使用的是ion-textarea标记,但带有“type ='number'"。
我假设这将强制表单输入为数字,当你使用ion-input时它是这样的,但是当你使用ion-textarea时它被忽略了。所以,Angular和Typescript之间的双向绑定将数字作为字符串覆盖。我将我的html改为使用ion-input,到目前为止它还能工作。

相关问题