Typescript: Требуется контекст отсутствующего свойства webpack 'default' для типа 'unkown' - PullRequest
0 голосов
/ 08 марта 2020

Я использую модуль контекстного модуля API для включения некоторых файлов в мой проект.

На значении, которое я извлекаю из свойства typescript, выдается ошибка: TS2339: Property 'default' does not exist on type 'unknown'.

Как я могу сделать это (строго) типизированным?

const blogPosts = ((context): Data[] => {
    const keys = context.keys();
    const values = keys.map(context);

    console.log('values: ', values);
    // logs: (3) [Module, Module, Module]
    // 0: Module { default: "---↵title: "A blog title"↵author: John↵date:… etc", __esModule: true, Symbol(Symbol.toStringTag): "Module"}
    // 1: Module { default: "---↵title: "Another blog title"↵author: John↵date:… etc", __esModule: true, Symbol(Symbol.toStringTag): "Module"}
    // 2: Module { default: "---↵title: "Yet another blog title"↵author: John↵date:… etc", __esModule: true, Symbol(Symbol.toStringTag): "Module"}

    const data: Data[] = keys.map((key, index) => {
      const value = values[index];

      // TS2339: Property 'default' does not exist on type 'unknown'
      return matter(value.default) as DocumentFrontMatter;
    });

    return data;
  })(require.context('../posts', true, /\.md$/));

Редактировать: Удалена следующая часть. Не думайте, что это в webpack-env. В @ types / webpack и @ types / webpack-env не упоминается понятие «по умолчанию».

Примечание: я добавил @types/webpack-env в мои зависимости проектов и использовал его в tsconfig . json ( источник ):

"types": [
  "node",
  "webpack-env"
]

1 Ответ

0 голосов
/ 09 марта 2020

Пока я работал над кодом, я обошел эту проблему. Мне пришлось снова использовать ту же функцию и выполнить переписывание, которое устранило необходимость в ключе по умолчанию.

Обратите внимание на __WebpackModuleApi.RequireContext.

function importAll(webpackContext: __WebpackModuleApi.RequireContext): Data[] {
  return webpackContext.keys().map((fileUrl) => {
    const body = webpackContext(fileUrl);

    const slug: string = fileUrl;
    const document: DocumentFrontMatter = matter(body.default) as DocumentFrontMatter;

    return {
      slug,
      document,
    };
  });
}

// ...

const posts = importAll(require.context('../posts', true, /\.md$/));
const events = importAll(require.context('../events', true, /\.md$/));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...