linq javascript库与typescript es6导入语法

时间:2015-10-26 15:06:53

标签: typescript

我正在使用linq(npm linq)和linq.d.ts文件关闭,但我无法使用ES 6语法。

我尝试了正常的import {Enumerable} from "linq",但拒绝找到"linq"。我将描述符更改为declare module "linq",而通常它没有引号。现在linq解析但我必须使用EnumerableStatic,但输出代码需要Enumerable而不是EnumerableStatic。我认为我可以通过import {EnumerableStatic as Enumerable} from "linq"来解决这个问题,但这无法正确解决。

有没有人有这个工作,如果你如何导入它?

4 个答案:

答案 0 :(得分:2)

我创建了main.ts文件:

/// <reference path="typings/linq/linq.d.ts" />

import { Enumerable } from 'linq';

我从编译器中得到TS2307: Cannot find module 'linq'.错误。当您向tsc.js添加一些调试语句时,您会看到此导入导致运行loadModuleFromNodeModules函数并且failedLookups是:

[ '/var/www/TypeScript-Playground/node_modules/linq.ts',
  '/var/www/TypeScript-Playground/node_modules/linq.tsx',
  '/var/www/TypeScript-Playground/node_modules/linq.d.ts',
  '/var/www/TypeScript-Playground/node_modules/linq/index.ts',
  '/var/www/TypeScript-Playground/node_modules/linq/index.tsx',
  '/var/www/TypeScript-Playground/node_modules/linq/index.d.ts',
  '/var/www/node_modules/linq.ts',
  '/var/www/node_modules/linq.tsx',
  '/var/www/node_modules/linq.d.ts',
  '/var/www/node_modules/linq/package.json',
  '/var/www/node_modules/linq/index.ts',
  '/var/www/node_modules/linq/index.tsx',
  '/var/www/node_modules/linq/index.d.ts',
  '/var/node_modules/linq.ts',
  '/var/node_modules/linq.tsx',
  '/var/node_modules/linq.d.ts',
  '/var/node_modules/linq/package.json',
  '/var/node_modules/linq/index.ts',
  '/var/node_modules/linq/index.tsx',
  '/var/node_modules/linq/index.d.ts',
  '/node_modules/linq.ts',
  '/node_modules/linq.tsx',
  '/node_modules/linq.d.ts',
  '/node_modules/linq/package.json',
  '/node_modules/linq/index.ts',
  '/node_modules/linq/index.tsx',
  '/node_modules/linq/index.d.ts' ]

这意味着找不到您的文件/var/www/TypeScript-Playground/node_modules/linq/linq.js

我会将您的问题重新发送到Gitterissues。另外https://github.com/Microsoft/TypeScript/issues/2242问题说:

  

在TypeScript 1.5中,如果源文件至少包含以下其中一项,则该文件被视为外部模块:

     

指定导出修饰符的顶级声明。

     

任何形式的新ES6导出或导入声明。

     

原始TypeScript导出等于表单export = Point。

     

表单import Math = require(&#34; math&#34;)的原始TypeScript import-equals语句。

我不认为linq遵循这些要点。

答案 1 :(得分:2)

定义文件需要更新:

  1. 文档和定义文件的功能名称与3.0.5版本不同。例如,Enumerable.From现在是Enumerable.from。您需要使用这些更改来更新定义文件。
  2. 定义文件目前不允许使用外部模块。添加它:

    declare module "linq" {
        export = Enumerable;
    }
    
  3. 然后,因为它在JavaScript代码中使用module.exports = Enumerable,您需要像这样导入它:

    import * as Enumerable from "linq";
    

答案 2 :(得分:1)

  

还有一个很有前途的linq-ts库,我写的   打字稿从头开始

该库已重命名为linq-es2015。它使用语言的所有最新功能,理论上更快。示例:https://github.com/ENikS/LINQ/tree/examples/TypeScript

答案 3 :(得分:0)

我找到了一个安装了 npm 的库retyped-linq-tsd-ambient。它有一个文件,ATW,linq.3.0.3-Beta4.d.ts - 包含小写命名。

我添加了对该文件的引用:

/// <reference path="../../node_modules/retyped-linq-tsd-ambient/linq.3.0.3-Beta4.d.ts" />

...并且无法导入linq.js模块。然后我添加了David Sherret的回答中提到的片段:

declare module "linq" {
     export = Enumerable;
}

我可以在我的打字稿代码中使用linq库并且具有智能性。

然而:与C#版相比,打字很弱,使用&#34;任何&#34;和无类型集合,而不是推断类型和类型集合。凭借打字稿语言的出色功能,应该可以更接近C#体验。

注意:还有一个看起来很有前途的linq-ts库,从头开始编写了我的Typescript。这似乎有更强大的打字。不幸的是,由于一些es6(-shim)依赖项,我无法在项目中编译/工作。