Saltar al contenido

¿Cómo hacer que el encadenamiento opcional funcione en TypeScript?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *