我正在使用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"
来解决这个问题,但这无法正确解决。
有没有人有这个工作,如果你如何导入它?
答案 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
。
我会将您的问题重新发送到Gitter或issues。另外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)
定义文件需要更新:
Enumerable.From
现在是Enumerable.from
。您需要使用这些更改来更新定义文件。定义文件目前不允许使用外部模块。添加它:
declare module "linq" {
export = Enumerable;
}
然后,因为它在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)依赖项,我无法在项目中编译/工作。