Поиск правильного импорта для стороннего модуля DefinitelyTyped


person Explosion Pills    schedule 12.02.2018    source источник


Ответы (1)


Определения типов нарушены. В определениях используется именованный экспорт:

export class VanillaTilt {

Но фактический исходный код использует экспорт по умолчанию:

export default class VanillaTilt {

Я бы предложил сделать запрос на включение в DefinitelyTyped, чтобы исправить это. В PR используйте export = class VanillaTilt (как предложено в комментариях), чтобы привести его в соответствие с использованием в CommonJS. Сверните свои собственные фиксированные определения, пока они не будут объединены. Вы должны иметь возможность использовать его так:

import VanillaTilt from 'vanilla-tilt'
VanillaTilt.init(...)

Я добавлю, что ошибка «неправильно названный импорт», которую вы получаете в этой форме, на самом деле является ошибкой линтера, а не ошибкой компилятора. Вы должны иметь возможность отключить это правило в конфигурации вашего линтера или добавить комментарий, чтобы исключить его.

person kingdaro    schedule 12.02.2018
comment
Это отличный ответ. Здорово, что вы провели различие между ошибкой линтера и ошибкой TypeScript! Всего одна небольшая поправка. Судя по источнику, vanilla-tilt на самом деле является модулем CommonJS. Поэтому в объявлениях следует использовать export = , а не export default. Правильный способ импортировать его это по-прежнему, как если бы это был default. github.com/micku7zu/vanilla- наклон.js/blob/мастер/lib/ - person Aluan Haddad; 12.02.2018
comment
Спасибо за комментарий и поправку. На самом деле я смотрел на эту строку здесь, но export = все же, вероятно, было бы более правильным. github.com/micku7zu/ vanilla-tilt.js/blob/ - person kingdaro; 12.02.2018
comment
Да, к сожалению, экосистема сейчас немного нарушена. Источник действительно экспортирует только файл default. Это компилируется в назначение для module.exports, которое затем, в свою очередь, сопоставляется обратно с экспортом default процессом взаимодействия ESM ‹-› CJS. Очень сложно понять, какую форму выбрать, не читая скомпилированный исходный код. - person Aluan Haddad; 12.02.2018
comment
@kingdaro я сделаю для этого пиар; я должен использовать export = как предложено в вашем ответе? Если да, то будете ли вы его обновлять? В противном случае я сделаю то, что в вашем ответе. - person Explosion Pills; 12.02.2018
comment
@kingdaro в этом конкретном случае я получаю cannot use namespace VanillaTilt as a type и an export assignment cannot be used in a module with other exported elements. Я не получаю сообщение об ошибке с export default class, но не знаю, будет ли это работать правильно, основываясь на том, что вы сказали. - person Explosion Pills; 12.02.2018
comment
Хм, определения и экспорт привередливы в TS. Я немного повозился с этим, и это, кажется, работает: gist.github.com/kingdaro/10bfd37cadb68e10c4fbd68cb09452cd - person kingdaro; 12.02.2018
comment
Я новичок в TS ... у кого-нибудь есть инструкция, как выполнить это исправление? - person Omar; 16.03.2018
comment
@kingdaro У меня такая же проблема. Я не могу найти четких шагов, чтобы исправить это... Какой файл мне изменить? - person Omar; 16.03.2018
comment
@kingdaro Я так рад твоему вниманию ... Я пробовал многое из того, что ты только что поделился, но выдал ошибки TS export assignments are not permitted - person Omar; 17.03.2018
comment
Будет ли работать, если вы измените export = внизу на export default? - person kingdaro; 17.03.2018
comment
Если нет, задайте новый вопрос вместо того, чтобы продолжать его здесь. - person kingdaro; 17.03.2018
comment
'"vanilla-tilt"' has no default export то есть с export = и export default - person Omar; 17.03.2018
comment
@kingdaro stackoverflow.com/questions/49329739/ - person Omar; 17.03.2018