Javascript angular2在使用另一个typescript文件中的其他类时报告错误

Javascript angular2在使用另一个typescript文件中的其他类时报告错误,javascript,angular,typescript,Javascript,Angular,Typescript,我导入了另一个文件中的类,angular2无法通过编译。但是如果我将类复制到同一个文件中,它可以通过编译 错误信息如下: /用户/SranLiu/Documents/code/angular/training tracker/src/app/exercise-detail.component.ts (8,2):类型{id:number;名称:string;exerciseSets:{id:number; num:number;先前的权重:number;weig…'不可分配给 类型“Exercis

我导入了另一个文件中的类,angular2无法通过编译。但是如果我将类复制到同一个文件中,它可以通过编译

错误信息如下:

/用户/SranLiu/Documents/code/angular/training tracker/src/app/exercise-detail.component.ts (8,2):类型{id:number;名称:string;exerciseSets:{id:number; num:number;先前的权重:number;weig…'不可分配给 类型“Exercise”。对象文字只能指定已知属性, 类型“Exercise”中不存在“exerciseset”

代码如下:

第一个文件:

//exercise-detail.component.ts
import { Component } from '@angular/core';

import { Exercise } from './exercise';


let exercise: Exercise = {
    id: 1,
    name: 'bench press',
    exerciseSets: [{
        id: 1,
        num: 1,
        previousWeight: 0,
        weight: 10,
        reps: 12,
        isFinish: true
    },{
        id: 2,
        num: 2,
        previousWeight: 0,
        weight: 10,
        reps: 12,
        isFinish: false
    }]
};

@Component({
    selector: 'exercise-detail',
    template: `
       <table border='1'>
           <tr>
               <td>finish?</td>
               <td>{{exercise.exerciseSets[1].isFinish}}</td>
           </tr>
       </table>
    `
})
export class ExerciseDetailComponent {

    exercise = exercise;
}
如果我将类从第二个文件复制到第一个文件,如下所示,它可以通过编译并成功运行

//exercise-detail.component.ts
import { Component } from '@angular/core';

export class ExerciseSet {
    id: number;
    num: number;
    previousWeight: number;
    weight: number;
    reps: number;
    isFinish: boolean;
}

export class Exercise {

    id: number;
    name: string;
    exerciseSets: ExerciseSet[];
}

let exercise: Exercise = {
    id: 1,
    name: 'bench press',
    exerciseSets: [{
        id: 1,
        num: 1,
        previousWeight: 0,
        weight: 10,
        reps: 12,
        isFinish: true
    },{
        id: 2,
        num: 2,
        previousWeight: 0,
        weight: 10,
        reps: 12,
        isFinish: false
    }]
};

@Component({
    selector: 'exercise-detail',
    template: `
       <table border='1'>
           <tr>
               <td>finish?</td>
               <td>{{exercise.exerciseSets[1].isFinish}}</td>
           </tr>
       </table>
    `
})
export class ExerciseDetailComponent {

    exercise = exercise;
}
//exercise-detail.component.ts
从'@angular/core'导入{Component};
导出类练习集{
id:编号;
num:数字;
以前的重量:数字;
重量:个数;
代表:人数;
isFinish:布尔;
}
出口课练习{
id:编号;
名称:字符串;
练习集:练习集[];
}
让练习:练习={
id:1,
名称:“台式压力机”,
练习集:[{
id:1,
数目:1,,
以前的权重:0,
体重:10,
代表:12,
是的
},{
id:2,
数字:2,
以前的权重:0,
体重:10,
代表:12,
isFinish:false
}]
};
@组成部分({
选择器:“练习细节”,
模板:`
结束?
{exercise.exerciseSets[1].isFinish}
`
})
导出类ExerciseDetailComponent{
运动=运动;
}
我认为这个问题不是因为语法和逻辑。也许我错过了typescript或angular中的一些规则,比如如果我将在另一个文件中使用该类,我需要声明或其他东西。我只使用typescript几天,所以有人知道吗?

如果使用“npm start”要使您的项目自动编译,您可能会遇到与我类似的问题。因为npm似乎只支持编译现有文件,如果您在npm工作期间创建新文件,npm将无法扫描新文件


所以我用“ng开始”手动重新组合项目,然后我的项目可以再次工作。

您的代码对我来说运行良好。但是,请注意,
Exercise
ExerciseSet
不应声明为类,而应声明为接口。这只是一个建议,因为它可能会导致细微的错误。您的代码完全有效,只是不是最佳的。真的谢谢谢谢你的回答。我发现我犯了一个非常愚蠢的错误。现在我解决了。这是什么?请发帖,或者更新你的问题,因为它现在让人困惑。谢谢你提醒我。我在下面发帖回答。我想我犯了一个非常愚蠢的错误。lol
npm start
只是package.json文件中定义的命令的别名。您可以自定义它以运行您想要的任何内容。
//exercise-detail.component.ts
import { Component } from '@angular/core';

export class ExerciseSet {
    id: number;
    num: number;
    previousWeight: number;
    weight: number;
    reps: number;
    isFinish: boolean;
}

export class Exercise {

    id: number;
    name: string;
    exerciseSets: ExerciseSet[];
}

let exercise: Exercise = {
    id: 1,
    name: 'bench press',
    exerciseSets: [{
        id: 1,
        num: 1,
        previousWeight: 0,
        weight: 10,
        reps: 12,
        isFinish: true
    },{
        id: 2,
        num: 2,
        previousWeight: 0,
        weight: 10,
        reps: 12,
        isFinish: false
    }]
};

@Component({
    selector: 'exercise-detail',
    template: `
       <table border='1'>
           <tr>
               <td>finish?</td>
               <td>{{exercise.exerciseSets[1].isFinish}}</td>
           </tr>
       </table>
    `
})
export class ExerciseDetailComponent {

    exercise = exercise;
}