Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实例化具有错误值类型变量的类通过检查_Javascript_Node.js_Typescript - Fatal编程技术网

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");
 }