首页 > 解决方案 > Typescript 在 ES11 语法上崩溃

问题描述

当我尝试使用 ES11 空值合并运算符时,打字稿抛出错误的原因是什么?

示例:

const a = undefined;
const b = a ?? 'test';

导致:

dev_project-shared_server | Using ts-node version 8.10.2, typescript version 3.9.5
dev_project-shared_server | /usr/src/app/services/server/src/index.ts:21
dev_project-shared_server |     const b = a ?? 'test';
dev_project-shared_server |                  ^
dev_project-shared_server | 
dev_project-shared_server | SyntaxError: Unexpected token '?'
dev_project-shared_server |     at Object.compileFunction (vm.js:344:18)
dev_project-shared_server |     at wrapSafe (internal/modules/cjs/loader.js:1048:15)
dev_project-shared_server |     at Module._compile (internal/modules/cjs/loader.js:1082:27)
dev_project-shared_server |     at Module._compile (/usr/src/app/node_modules/source-map-support/source-map-support.js:547:25)
dev_project-shared_server |     at Module.m._compile (/tmp/ts-node-dev-hook-7547668788214215.js:57:25)
dev_project-shared_server |     at Module._extensions..js (internal/modules/cjs/loader.js:1138:10)
dev_project-shared_server |     at require.extensions.<computed> (/tmp/ts-node-dev-hook-7547668788214215.js:59:14)
dev_project-shared_server |     at Object.nodeDevHook [as .ts] (/usr/src/app/node_modules/ts-node-dev/lib/hook.js:61:7)
dev_project-shared_server |     at Module.load (internal/modules/cjs/loader.js:982:32)
dev_project-shared_server |     at Function.Module._load (internal/modules/cjs/loader.js:875:14)
dev_project-shared_server | [ERROR] 06:58:29 SyntaxError: Unexpected token '?'

我的tsconfig.json

{
  "compilerOptions": {
    "target": "ESNext",
    "esModuleInterop": true,
    "allowJs": true,
    "skipLibCheck": true,
    "moduleResolution": "node",
    "module": "CommonJS",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": false,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "forceConsistentCasingInFileNames": true,
    "removeComments": true,
    "sourceMap": true,
    "declaration": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "exclude": ["node_modules", "dist"],
  "include": ["**/*.ts"]
}

标签: typescriptecmascript-nextts-node

解决方案


你的节点是什么版本?nodejs v14 支持 nullish 合并运算符 (??): https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator


推荐阅读