我正在使用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属性都将变为字符串而不是数字.
1条答案
按热度按时间s4n0splo1#
没关系。经过反复的调查,我发现了问题所在。
我的数据变量'hints.timeInterval'被绑定到一个带有
html使用的是ion-textarea标记,但带有“type ='number'"。
我假设这将强制表单输入为数字,当你使用ion-input时它是这样的,但是当你使用ion-textarea时它被忽略了。所以,Angular和Typescript之间的双向绑定将数字作为字符串覆盖。我将我的html改为使用ion-input,到目前为止它还能工作。