khusamov
@khusamov
ReactJS, NodeJS, TypeScript, Sencha ExtJS

Как только TS-классы в разных файлах, то появляются ошибки. Как это исправить?

Если все в одном файле, то ошибок нет. Но как только я их разношу в разные файлы, то появляются следующие ошибки:

/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)'
}]);
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
khusamov
@khusamov Автор вопроса
ReactJS, NodeJS, TypeScript, Sencha ExtJS
Вместо

import IOption from './option/ConfigOption';

надо написать:

import { IOption } from './option/ConfigOption';
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы