如果按文件分隔typescript类,则会发生错误。怎么会这样?

时间:2017-07-13 14:46:11

标签: typescript typescript2.0

什么可能有错误? 当所有类都在同一文件中时,不会出现错误。 但是,只要将类放在不同的文件中,就会出现以下错误:

  

/index2.ts(8,13):错误TS2345:类型的参数' {name:string;   价值:数量; }'不能分配给' ConfigOption类型的参数   | ConfigOption []&#39 ;.输入' {name:string;价值:数量; }'不是   可分配给类型' ConfigOption []'。       物业长度'类型' {name:string;价值:数量; }'

     

/index2.ts(1414):error TS2345:类型的参数' {name:string;   value:string; } []'不能分配给类型的参数   ' ConfigOption []&#39 ;.输入' {name:string; value:string; }'不是   可分配给类型' ConfigOption'。       财产'评论'类型' {name:string; value:string; }&#39 ;. 17:36:36 - 编译完成看文件   变化。

interface IOption {
    name: string;
    value?: any;
    comment?: string;
}

class ConfigOption {
    name: string;
    value: any;
    comment: string;
    constructor(data: IOption) {}
}

type TOptionArray = (IOption | ConfigOption)[];

class Config {
    constructor(options?: TOptionArray) {}
    push(data: ConfigOption | IOption | TOptionArray) {}
}

// Test example:

const config = new Config;

config.push({
    name: 'name',
    value: 0
});


new Config([{
    name: 'role',
    value: 'camelcase(this.element.name)'
}]);

https://www.dropbox.com/s/u0ergcw4pt88oeu/typescriptproblem.zip?dl=0

按文件布局代码:

// config/Config.ts

import IOption from './option/ConfigOption';
import ConfigOption from './option/ConfigOption';

export type TOptionArray = (IOption | ConfigOption)[];

export default class Config {
    constructor(options?: TOptionArray) {}
    push(data: ConfigOption | IOption | TOptionArray) {}
}

// config/option/ConfigOption.ts

import Config from '../Config';

export interface IOption {
    name: string;
    value?: any;
    comment?: string;
}

export default class ConfigOption {
    name: string;
    value: any;
    comment: string;
    constructor(data: IOption) {}
}


// index2.ts

import Config from './config/Config';

const config = new Config;

config.push({
    name: 'name',
    value: 0
});


new Config([{
    name: 'role',
    value: 'camelcase(this.element.name)'
}]);

2 个答案:

答案 0 :(得分:0)

您输入不正确。

您应该更改config/option/ConfigOption.ts以删除默认导出:

export class ConfigOption { // Removed the `default` keyword.

config/Config.ts中,导入如下:

import { IOption, ConfigOption } from './option/ConfigOption';

在我自己的代码中,我完全放弃了默认导出,以避免这样的错误。您可以保留默认导出,但我不推荐它。

你拥有它的方式是这样的:

import IOption from './option/ConfigOption';
import ConfigOption from './option/ConfigOption';

这会从./option/ConfigOption.ts导入默认导出,并将其本地分配给IOptionConfigOption。因此,IOptionIOption中的./option/ConfigOption.ts不对应,而是与ConfigOption模块的默认导出相对应。

答案 1 :(得分:-1)

您可以省略导出和导入关键字,即使您使用单独的.ts文件也不需要这些关键字。

除非您想使用模块或命名空间,但似乎您不希望这样做?