Búsqueda de sitios web

biblioteca linq de javascript con sintaxis de importación de typescript es6


Estoy usando linq (npm linq) con los archivos linq.d.ts de Definitely Typed, sin embargo no puedo hacerlo funcionar con la sintaxis de ES 6.

Intenté el import {Enumerable} from "linq" normal, sin embargo se negó a encontrar "linq". Cambié el descriptor para que tuviera declare module "linq", mientras que normalmente no tendría comillas. Ahora linq se resuelve, pero tengo que usar el EnumerableStatic, aunque el código de salida necesita tener Enumerable y no EnumerableStatic. Pensé que podría solucionarlo haciendo import {EnumerableStatic as Enumerable} from "linq", sin embargo esto no se resuelve correctamente.

¿Alguien ha hecho que esto funcione y, de ser así, cómo lo importas?

Respuesta #1

El archivo de definición necesita ser actualizado:

  1. La documentación y el archivo de definición tienen un uso de mayúsculas diferente para los nombres de las funciones en comparación con la versión 3.0.5. Por ejemplo, Enumerable.From ahora es Enumerable.from. Necesitarás actualizar el archivo de definición con estos cambios.
  2. El archivo de definición actualmente no permite módulos externos. Agrégalo a él:

    declare module "linq" {
        export = Enumerable;
    }
    
  3. Entonces, dado que utiliza module.exports=Enumerable en el código JavaScript, tendrás que importarlo así:

    import * as Enumerable from "linq";
    

Respuesta #2

Creé el archivo main.ts:

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

import { Enumerable } from 'linq';

Obtengo el error TS2307: Cannot find module 'linq'. del compilador. Cuando agregas algunas declaraciones de depuración al tsc.js, obtienes que esta importación lleva a ejecutar la función loadModuleFromNodeModules y los failedLookups son:

[ '/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' ]

eso significa que tu archivo /var/www/TypeScript-Playground/node_modules/linq/linq.js no se encuentra.

Recomendaría volver a publicar su pregunta en Gitter o en issues. También el issue https://github.com/Microsoft/TypeScript/issues/2242 dice que:

En TypeScript 1.5, un archivo de origen se considera un módulo externo si contiene al menos uno de los siguientes:

Una declaración de nivel superior que especifica un modificador de exportación.

Una nueva declaración de exportación o importación de ES6 de cualquier forma.

Una asignación original de exportación de TypeScript de la forma export=Point.

Una declaración original de importación-igual de TypeScript de la forma import Math=require("math").

No creo que linq siga los puntos.

Artículos relacionados