TL; DR:
Измените файл moment.d.ts
из
export = moment;
К
declare module 'moment' {
export default moment;
}
Обсуждение:
Похоже, что ответ заключается в отслеживании решения модуля, используя
tsc --traceresolution'
Вы можете увидеть именно то, что он вытворяет. Например,
import moment from 'moment'
Похоже на данный момент в машинописном только файлы:
File 'C:/Code/Trunk/moment.ts' does not exist.
File 'C:/Code/Trunk/moment.tsx' does not exist.
File 'C:/Code/Trunk/moment.d.ts' does not exist.
Затем ищет узел пакетов:
File 'C:/Code/Trunk/node_modules/@types/moment.d.ts' does not exist.
File 'C:/Code/Trunk/node_modules/@types/moment/package.json' does not exist.
File 'C:/Code/Trunk/node_modules/@types/moment/index.d.ts' does not exist.
Как я использую прямой .js файл, Мне нужно использовать синтаксис AMD, чтобы он искал что-то другое, кроме только файлов типа TypeScript, например
import moment = require('libs/moment')
Что дает
File 'C:/Code/ABDR/Trunk/Mobile/MyABDR/scripts/libs/moment.js' exist - use it as a name resolution result.
успеха! Почти!Funnily TSC в настоящее время не дает никаких ошибок, связанных с момента, но во время выполнения я получаю эту ошибку от RequireJS:
Uncaught Error: Load timeout for modules: libs/moment
Что я могу только предположить, что это потому, что moment.js
не экспорт AMD в этом, и в моем RequireJS config У меня есть:
shim: {
moment: {
exports: "moment"
}
}
Что создает для меня экспорт AMD. Итак, проблема в том, что JS-сторона вещей прекрасна, потому что RequireJS создает собственный экспорт, но сторона TS не знает, что компилятор жалуется, когда я пытаюсь использовать его в TS-коде.
Даже указав .d.ts файл явно не работает:
/// <reference path="../../typings/moment.d.ts" />
дает
error TS2304: Cannot find name 'moment'.
Так что вопрос есть в тот момент не экспортирует себя так, как мы потребляем это, например, пространство имен, так что единственный способ, которым я получил его на работу было изменить файл moment.d.ts
из
export = moment;
До
declare module 'moment' {
export default moment;
}
И теперь это прекрасно работает, нет импорта или чего-либо еще!
Как выглядит ваш 'tsconfig.json'? – Saravana