Recabamos en distintos sitios y así traerte la solución a tu duda, si tienes alguna duda déjanos la inquietud y te contestaremos con gusto, porque estamos para servirte.
Solución:
El problema es que estás apuntando esnext
esto le indicará al compilador que muestre todas las características del idioma tal como están sin ninguna transpilación. Establezca el idioma en es2020 (o inferior) y ?.
y ??
se transpilará a un código compatible:
(async function ()
let imageFileId = (await db.query(sql`select id from image_files where sha256=$sha256`))[0]?.id;
)()
Enlace del patio de recreo
No hay un control detallado sobre qué características del idioma se transpilan y cuáles no. Desafortunadamente, tiene que elegir una versión en su conjunto.
Bueno, no quería usar Babel porque entonces tendría que averiguar cómo reemplazar ts-node
. Hay un montón de documentos desactualizados que se refieren a paquetes antiguos de Babel, pero estas instrucciones deberían funcionar a partir de noviembre de 2019:
Agrega un .babelrc
Archivo:
"presets": [
["@babel/preset-env","targets": "node": "current"],
"@babel/preset-typescript"
],
"plugins": [
"@babel/plugin-syntax-bigint"
]
Agregue estos depósitos:
"devDependencies":
"@babel/cli": "^7.7.0",
"@babel/core": "^7.7.0",
"@babel/node": "^7.7.0",
"@babel/plugin-syntax-bigint": "^7.4.4",
"@babel/preset-env": "^7.7.1",
"@babel/preset-typescript": "^7.7.0",
"@types/node": "^12.7.5",
"typescript": "^3.7.2"
Ejecuta tu código con:
node_modules/.bin/babel-node --extensions ".ts" src/index.ts
El --extensions ".ts"
es muy importante, aunque esté intentando explícitamente ejecutar un archivo .ts, no lo transpilará sin eso.
Me gusta usar GNU Make en lugar de scripts de package.json:
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:
NM := node_modules/.bin
.PHONY: build start dev clean test publish
## commands
########################################
__default:
$(error Please specify a target)
build: build-types build-js dist/package.json
build-types: node_modules/.yarn-integrity
$(NM)/tsc --emitDeclarationOnly
build-js: node_modules/.yarn-integrity
$(NM)/babel src --out-dir dist --extensions ".ts" --source-maps inline
run: node_modules/.yarn-integrity
$(NM)/babel-node --extensions ".ts" src/index.ts
check: node_modules/.yarn-integrity
$(NM)/tsc --noEmit
dist:
mkdir -p [email protected]
clean:
rm -rf node_modules dist yarn-error.log
dist/package.json: package.json | dist
jq 'del(.private, .devDependencies, .scripts, .eslintConfig, .babel)' $< > [email protected]
## files
########################################
node_modules/.yarn-integrity: yarn.lock
@yarn install --frozen-lockfile --production=false --check-files
@touch -mr [email protected] $<
yarn.lock: package.json
@yarn check --integrity
@touch -mr [email protected] $<
O simplemente copie de TypeScript Babel Starter de Microsoft.
Si piensas que ha resultado de provecho nuestro post, sería de mucha ayuda si lo compartes con más seniors así contrubuyes a extender nuestro contenido.