Búsqueda de sitios web

Extensión de GNOME Shell en TypeScript. Cómo importar archivos .ts


Estoy tratando de desarrollar una extensión de Gnome Shell con TypeScript. El problema que tengo es que recibo errores al importar archivos .ts. La documentación de Gnome Shell dice que se debe configurar tsconfig de la siguiente manera, que se encuentra aquí en la documentación de TypeScript de Gnome:

{
  "compilerOptions": {
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "outDir": "./dist",
    "sourceMap": false,
    "strict": true,
    "target": "ES2022",
    "lib": [
      "ES2022"
    ],
  },
  "include": [
    "ambient.d.ts",
  ],
  "files": [
    "extension.ts",
    "prefs.ts"
  ],
}

Pero si importo sin extensión, obtengo el siguiente error:

1. tsserver: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './constants.js'? [2835]

Entonces, si importo con la extensión import { SOME_CONSTANT } from './constansts.ts, obtengo el siguiente error:

1. tsserver: An import path can only end with a '.ts' extension when 'allowImportingTsExtensions' is enabled. [5097]

Si habilito esta regla, entonces obtengo un error de compilación:

tsconfig.json:5:35 - error TS5096: Option 'allowImportingTsExtensions' can only be used when either 'noEmit' or 'emitDeclarationOnly' is set.

5     "allowImportingTsExtensions": true,
                                ~~~~

Se compila pero la extensión .ts se mantiene en la declaración de importación, por lo que no se puede encontrar el archivo compilado. No puedo configurar ninguno de los ajustes noEmit o emitDeclarationOnly porque necesito generar archivos JavaScript, ya que Gnome shell utiliza JavaScript puro con módulos de importación ES. He intentado cambiar la moduleResolution a ESNext y un par de otras opciones, pero entonces no puedo importar ninguna de las librerías de Gnome. Estoy perdido en este punto. ¿Alguien podría ayudarme, por favor? Además, si alguien sabe qué módulos habilitar en la documentación, por favor déjenlo en los comentarios, eso también sería útil.

Respuesta #1

Creo que deberías poder especificar "constants.js" en tu archivo .ts, haciendo referencia a lo que se emitirá, en lugar de "constants.ts" que realmente escribiste, lo cual parece poco intuitivo, pero así es como se ve mi TypeScript (aunque no forma parte de una extensión de GNOME).