Javascript 实例化具有错误值类型变量的类通过检查
我有一门课:Javascript 实例化具有错误值类型变量的类通过检查,javascript,node.js,typescript,Javascript,Node.js,Typescript,我有一门课: import { iFlowers } from "./iFlowers "; export default class flowers implements iFlowers { colorNumber: number; size: number; constructor(colorNr: number, size: number){ this.colorNumber = colorNr; this.size = size; } } 其中,接口为: ex
import { iFlowers } from "./iFlowers ";
export default class flowers implements iFlowers {
colorNumber: number;
size: number;
constructor(colorNr: number, size: number){
this.colorNumber = colorNr;
this.size = size;
}
}
其中,接口为:
export interface iFlowers {
colorNumber: number;
size: number;
}
我想使用的对象数组列表(在下面的方法中名为testFlowers
)是:
[{
"colorNumber": 5,
"size": 4
},
{
"colorNumber": "44",
"size": 12
}]
要实例化对象,我尝试执行以下操作:
const flowers = require("../../flowers").default;
import { iFlowers } from "../../iFlowers";
var someFunction (testFlowers: any) {
for (var i=0; i < testFlowers.length; i++)
try {
var data = new flowers(testFlowers[i].colorNumber, testFlowers[i].size);
}
catch (err) {
console.error("Data doesn't match format");
}
}
const flowers=require(“../../flowers”)。默认值;
从“../../iFlowers”导入{iFlowers}”;
var someFunction(testFlowers:any){
对于(var i=0;i
它没有进入抓块!我就是不明白为什么…TypeScript不知道编译时变量的类型,所以它不会抱怨您使用了错误的类型
当您运行代码时,它将是JavaScript,这样类型信息就不存在了,并且可以正常运行。您可以在
testFlower
数据上指定类型,并在代码中处理它。这是
这将导致当前代码的编译时错误,因为colorNumber
可以是数字或字符串。类的构造函数需要一个数字。它可以修改为
for (var i=0; i < testFlowers.length; i++)
try {
let colorNumber = Number(testFlowers[i].colorNumber);
if (!isNaN(colorNumber)) {
var data = new flowers(colorNumber, testFlowers[i].size);
} else {
throw Error(`${testFlowers[i].colorNumber} is not a number`)
}
} catch (err) {
console.error("Data doesn't match format");
}
for(var i=0;i
好的,我该如何更正?如何使代码进入catch块并仍然使用接口(我知道接口只存在于TS中,但这是我的项目的一个要求…?)。。。你不能,至少不能用你问的方式。接口是TS编译时的东西,try/catch块是JS运行时的东西。您可以使用类似或的东西来测试它是否是一个数字。虽然您可以强制typescript编译为javascript,但在修复错误之前,通常无法编译(并因此运行)此代码。
for (var i=0; i < testFlowers.length; i++)
try {
let colorNumber = Number(testFlowers[i].colorNumber);
if (!isNaN(colorNumber)) {
var data = new flowers(colorNumber, testFlowers[i].size);
} else {
throw Error(`${testFlowers[i].colorNumber} is not a number`)
}
} catch (err) {
console.error("Data doesn't match format");
}