En un proyecto, tengo una variable de entorno que debería usarse para especificar si nos gustaría usar HTTPS o no:
SSL_ENABLED=1Basado en estas variables de entorno, ahora estoy tratando de usar el módulo https o http:
import * as http from parseInt(process.env.SSL_ENABLED || '', 10) ? 'https' : 'http' const server = http.createServer(...)La importación anterior arroja el siguiente error mecanografiado:
TS1141: String literal expected.Por supuesto que podría solucionar esto, importando https y http por separado, pero quería saber si había alguna forma de arreglar lo anterior con una sola importación.
Sin texto mecanografiado, lo siguiente funciona bien:
const http = require('http' + parseInt(process.env.SSL_ENABLED || '', 10) ? 's' : ''))Esto es posible con la import() , que es más conveniente cuando se combina con la await de nivel superior :
const http = await import(parseInt(process.env.SSL_ENABLED || '', 10) ? 'https' : 'http'); // ...Tenga en cuenta que la importación dinámica puede tener un efecto negativo en los empaquetadores (ya que no pueden analizar estáticamente el gráfico del módulo para crear los paquetes), pero esto parece un código de Node.js que probablemente no esté empaquetando.
O si no puede usar la await de nivel superior por algún motivo, consuma la promesa directamente:
import(parseInt(process.env.SSL_ENABLED || '', 10) ? 'https' : 'http') .then(http => { // ...use `http` here... });