看起来像可选链has landed。 Here's an example
我不知道如何使TS正确编译。我的项目中没有任何语法错误,但这是
let imageFileId = (await db.query(sql`select id from image_files where sha256=${sha256}`))[0]?.id;
输出为:
let imageFileId = (await db.query(mysql3_1.sql `select id from image_files where sha256=${sha256}`))[0]?.id;
在Node中获得本机支持之前,不会运行。
这是我的tsconfig:
{
"compilerOptions": {
"strict": true,
"importHelpers": false,
"inlineSources": true,
"noEmitOnError": true,
"pretty": true,
"module": "commonjs",
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": false,
"removeComments": false,
"preserveConstEnums": false,
"sourceMap": true,
"lib": ["es2018"],
"skipLibCheck": false,
"outDir": "dist",
"target": "esnext",
"declaration": false,
"resolveJsonModule": true,
"esModuleInterop": false,
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"baseUrl": ".",
"paths": {
"*": ["src/*"]
},
"noEmit": false
},
"files": [
"src/index"
],
"include": [
"src/**/*.d.ts"
]
}
我需要启用其他一些选项来编译?.
运算符吗?
请注意,我不是正在使用Babel,并且我不想将其带入图片中。
答案 0 :(得分:4)
问题是您要定位esnext
,这将告诉编译器按原样输出所有语言功能,而无需进行任何编译。例如,将语言设置为es2020,?.
和??
将被转换为兼容代码:
(async function () {
let imageFileId = (await db.query(sql`select id from image_files where sha256=${sha256}`))[0]?.id;
})()
无法精确控制哪些语言功能会被编译,哪些不翻译,不幸的是您必须选择一个版本,
答案 1 :(得分:1)
好吧,我不想使用Babel,因为那样我就必须弄清楚如何替换ts-node
。有很多过时的文档提到了旧的Babel软件包,但是这些说明应该在2019年11月生效:
添加一个.babelrc
文件:
{
"presets": [
["@babel/preset-env",{"targets": {"node": "current"}}],
"@babel/preset-typescript"
],
"plugins": [
"@babel/plugin-syntax-bigint"
]
}
添加这些部门:
"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"
}
使用以下代码执行代码:
node_modules/.bin/babel-node --extensions ".ts" src/index.ts
--extensions ".ts"
非常重要,即使您明确地尝试执行.ts文件,它也不会将其编译。
我喜欢使用GNU Make而不是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 $@
clean:
rm -rf node_modules dist yarn-error.log
dist/package.json: package.json | dist
jq 'del(.private, .devDependencies, .scripts, .eslintConfig, .babel)' $< > $@
## files
########################################
node_modules/.yarn-integrity: yarn.lock
@yarn install --frozen-lockfile --production=false --check-files
@touch -mr $@ $<
yarn.lock: package.json
@yarn check --integrity
@touch -mr $@ $<