什么可能有错误? 当所有类都在同一文件中时,不会出现错误。 但是,只要将类放在不同的文件中,就会出现以下错误:
/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)'
}]);
答案 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
导入默认导出,并将其本地分配给IOption
和ConfigOption
。因此,IOption
与IOption
中的./option/ConfigOption.ts
不对应,而是与ConfigOption
模块的默认导出相对应。
答案 1 :(得分:-1)
您可以省略导出和导入关键字,即使您使用单独的.ts文件也不需要这些关键字。
除非您想使用模块或命名空间,但似乎您不希望这样做?