如何导入时刻类型定义

时间:2017-04-14 11:32:32

标签: typescript momentjs atom-editor

我使用这个yeoman发生器制作了一个带有打字稿的角度1项目:https://github.com/FountainJS/generator-fountain-systemjs
它使用SystemJS和jspm来获取依赖关系,但使用npm进行类型定义(使用DefinitelyTyped存储库)。

过去几天我一直在努力尝试导入时刻类型定义。 我已经使用jspm安装了一下,我发现它带有自己的类型定义,所以如果你调用命令npm install @types/moment --save-dev,你只会得到一个存根和一个弃用警告

  

这是Moment的存根类型定义   (https://github.com/moment/moment)。时刻提供了自己的类型   定义,所以你不需要安装@ types / moment!

现在,我不知道它是我的编辑器,项目或打字稿设置还是真的打字稿问题,但我似乎无法正确导入时刻。类型定义。

如果我执行import moment from 'moment';import * as moment from 'moment';我在编辑器上遇到此错误(带有atom-typescript的atom,但我在Visual Studio代码上有相同的错误)Cannot find module 'moment'.

尽管有这个错误,当我构建我的应用程序时它工作正常(调用时刻函数工作)。

我已经尝试了很多我在互联网上找到的解决方案(显然,从瞬间导入类型定义是一个常见的问题),但没有一个工作。 昨天我设法通过在moment内手动创建目录node_modules/@types并将moment.d.ts放入其中来使其工作(我必须重命名index.d.ts)。

由于我并不喜欢这个解决方案,我想至少创建一个类型文件夹,我可以将内容放入其中而无需修改node_modules结构。所以我创建了一个文件夹custom-types并将moment文件夹放在那里,然后将custom-types添加到tsconfig.json,我认为这样做会很好但实际上错误再次出现......

现在我没有想法,我也不知道还有什么可以尝试。

这是我当前的tsconfig.json(在最后一次尝试使我工作的时候,我添加了custom-types文件夹,其中包含不同的路径,尽管它与{{1}处于同一级别}}文件夹和node_modules文件)

tsconfig.json

1 个答案:

答案 0 :(得分:5)

我一直在TypeScript(IntelliJ)中使用//code borrowed from http://stackoverflow.com/questions/19124752/non- //recursive-quicksort public synchronized void qSort(PipedOutputStream pout, int start, int sz) { Deque<int[]> stack = new ArrayDeque<int[]>(); int first = start; int last = start + sz - 1; if(first >= arr.length || last >= arr.length){ System.out.printf("\nSorting error: parameters out of bounds! Start %d, end %d \n", start, last); return; } stack.push(new int[] {first, last}); while(!stack.isEmpty()) { qsortStep(arr, stack); } try { out = new ObjectOutputStream ( pout ); } catch (IOException e ) { e.printStackTrace(); } while ( size >= 1 ) { try { // System.out.printf("sort is writing %d to pipe.\n", v ); out.writeObject( arr[start] ); out.flush( ); start++; size--; } catch(IOException e ) { e.printStackTrace(); } } } private synchronized void qsortStep(T[] list, Deque<int[]> stack) { if(stack.isEmpty()) return; int temp[] = stack.pop(); int first = temp[0]; int last = temp[1]; int boundLo = first; int boundHi = last; //Pivot can be optimized to median of quintiles to mitigate O(n^2) on sorted arrays. int pivot = last; /*int sz = last - first; int pivots[] = {first, first+sz/5, first+2*sz/5, first+4*sz/5, last}; for(int i = 0; i < 5; i++) for(int j = 4; j > i; j--) if(arr[pivots[i]].compareTo(arr[pivots[j]]) > 0) swap(pivots, i, j);*/ pivot = last; while(first < last) { //possible opportunity here for early min if(list[first].compareTo(list[pivot]) >= 0) { last--; if(first != last) swap(list, first, last); swap(list, last, pivot); pivot--; } else first++; } if(boundLo < (pivot - 1)) stack.add(new int[] {boundLo, pivot - 1}); if(boundHi > (pivot + 1)) stack.add(new int[] {pivot + 1, boundHi}); } ,没有额外的工作来安装它的输入。

以下是相关配置:

  • 内部moment
    • tsconfig.json
    • 根本没有"moduleResolution": "Node"部分
  • "types"没有./package.json
  • 内部@types/moment
    • ./node_modules/moment/存在
    • ./moment.d.ts./package.json
    • "typings": "./moment.d.ts"./package.json

当我切换回"version": "2.14.1"时,TypeScript会说"moduleResolution": "Classic"。所以这可能是罪魁祸首。