Как написать объявление типа для модуля CSS как модуля ES

Я обновляю Gatsby с v2 до v3, и в этом обновлении модули CSS импортируются как модули ES . Он компилируется правильно и выглядит так, как ожидалось, за исключением того, что я получаю ошибки типа в моем редакторе, поскольку он не может найти экспорт.

Я предполагаю, что объявление типа неверно, но я не уверен, как его динамически вводить, не называя каждый возможный класс CSS как экспорт.

Foo.module.css:

      .foo { color: red; }
.bar { color: blue; } 

Foo.tsx:

      import { foo, bar } from "./Foo.module.css"
// Module "*.module.css" has no exported member 'foo'
// Module "*.module.css" has no exported member 'bar'

css.d.ts:

      declare module "*.module.css" {
    const styles: { [className: string]: string }
    export * from styles
}

2 ответа

Я столкнулся с той же проблемой, и, похоже, для меня работает следующее:

      declare module "*.module.css" {
    const styles: { [className: string]: string }
    export = styles
}

Однако это может быть злоупотреблением TypeScript, поскольку, согласно документации TypeScript , export = синтаксис должен быть для модулей CommonJS и AMD, где он представляет exports в этих модульных системах.

Я думаю, единственный способ - использовать:

      import styles from "./Foo.module.css";

Если вы не можете экспортировать отдельные стили из файла css в вашем d.ts:

      declare module '*.css' {
  const styles: {
    [className: string]: string;
    foo: string;
    bar: string;
  };
  export default styles; 
}

кстати, синтаксис в вашем объявлении типов был неправильным, если вы используете from в вашем операторе экспорта ожидается строка (путь или имя пакета npm).

Другие вопросы по тегам