Если все в одном файле, то ошибок нет. Но как только я их разношу в разные файлы, то появляются следующие ошибки:
/index2.ts(13,13): error TS2345: Argument of type '{ name: string; value: number; }' is not assignable to parameter of type 'ConfigOption | ConfigOption[]'.
Type '{ name: string; value: number; }' is not assignable to type 'ConfigOption[]'.
Property 'length' is missing in type '{ name: string; value: number; }'.
/index2.ts(19,12): error TS2345: Argument of type '{ name: string; value: string; }[]' is not assignable to parameter of type 'ConfigOption[]'.
Type '{ name: string; value: string; }' is not assignable to type 'ConfigOption'.
Property 'comment' is missing in type '{ name: string; value: string; }'.
17:58:23 - Compilation complete. Watching for file changes.
Вот код в одном файле:
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/typescri...
Если в архив не хочется лезть, то вот как они разложены по файлам:
// 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)'
}]);