В этом случае я получаю следующую ошибку, используя TS 3.9 с { compilerOptions: {declaration: true }}
в моем tsconfig.json:
// a.ts
export const key = 1234
export const obj = {
[key]: 1
};
export default obj;
// b.ts
import A from "./a";
import { key} from "./a"
// Exported variable 'theExport' has or is using name 'key' from external module "c:/tsexample/src/a" but cannot be named.ts(4023)
const theExport = {
A: A,
B: 2,
C: 3,
};
export default theExport
// Exported variable 'theExport' has or is using name 'key' from external module "c:/tsexample/src/a" but cannot be named.ts(4023)
В комментарии по связанной проблеме, предложенное в то время, в два обходных пути:
- явно импортировать тип
- явно объявить тип экспорта (где возникает ошибка)
(1) в этом случае не работает. Я попытался экспортировать все из «a» и импортировать все в «b», и в сообщении об ошибке не было никакой разницы.
Единственное, что сработало, - это очень подробная и сложная для поддержки явная аннотация типа:
// updated b.ts
import A from "./a";
const theExport: {
// https://github.com/microsoft/TypeScript/issues/9944
[index: string]: typeof A | number;
} = {
A: A,
B: 2,
C: 3,
};
export default theExport;
У меня вопрос:
- какой обходной путь я могу использовать, который не требует повторения формы объекта?
- почему импорт типа не решает проблему?
Этот вопрос похож, но отличается от следующего:
- https://stackoverflow.com/a/44066867/2482570: не актуально, поскольку в нем говорится, что проблема была устранена в TS 2.9
- https://stackoverflow.com/a/49841010/2482570: ни один из ответов не дает обходного пути, применимого к этому кейс
- Ошибка машинописного текста: возврат тип экспортируемой функции имеет или использует имя ‹n› из внешнего модуля ‹M›, но не может быть названо и Ошибка ввода. Экспорт модуля по умолчанию имеет или использует частное имя - переключитесь с машинописного текста v1.8 на 2: ни одно из предложенных решений не работает в этом случае