【问题标题】:Typescript optional chaining error: Expression expected.ts(1109)Typescript 可选链接错误:Expression expected.ts(1109)
【发布时间】:2019-07-03 19:41:50
【问题描述】:

我正在尝试在 Typescript + React Native 中进行可选链接。

假设我有以下接口:

interface Bar {
  y: number
}

interface Foo {
  x?: Bar
}

我尝试运行以下命令:

 const test: Foo = {x: {y: 3}};
 console.log(test.x?.y);

VSCode 将在?. 下显示错误,说明如下:Expression expected.ts(1109)

您知道为什么会发生这种情况或我应该如何解决它吗?谢谢。

【问题讨论】:

  • @TitianCernicova-Dragomir 哦该死的,不知道。谢谢。 (敬礼!:D)
  • 可选链目前处于第 1 阶段,语义仍在最终确定中,还有一些竞争提案。 Typescript 不会在第 3 阶段以下实现任何东西 |或 |可能会将一些东西添加到他们认为有 0% 机会成为有效 javascript(即静态类型)的超集
  • TypeScript 3.7.0 版本中可能会支持可选的链接。 github.com/microsoft/TypeScript/issues/…
  • TypeScript 3.7.0-BETA 现在支持可选链接

标签: typescript react-native visual-studio-code


【解决方案1】:

对于那些想知道的人,可选链接(? 运算符)现在可用于 TypeScript 3.7(Beta),截至 2019 年 10 月。您可以通过运行以下命令来安装该版本:

npm install typescript@beta

这就是您可以如何使用运算符,如 release notes 中所述。

let x = foo?.bar.baz();

相当于

let x = (foo === null || foo === undefined) ?
    undefined :
    foo.bar.baz();

除了可选链,其他有趣的功能包括 Nullish Coalescing(?? 运算符)。

更新(2019 年 11 月)

TypeScript 的可选链现在正式可用。安装最新版本的 typescript 应该可以让您使用很酷的新功能。

npm install typescript

对于那些正在使用 VS Code 的人,请参阅Austin's excellent answer 以使其与新的 TypeScript 版本一起使用。

对于那些使用 WebStorm 的人,您需要配置 TypeScript 以使用您项目安装的 TypeScript 版本。

Preferences -> Languages & Frameworks -> TypeScript

此外,如果您使用的是旧版本的 WebStorm,则在尝试使用 Nullish Coaslescing 运算符 (??) 时可能会遇到错误/警告。要解决此问题,您需要安装 WebStorm 2019.2.4,或任何比上述更新的版本。

【讨论】:

    【解决方案2】:

    TypeScript 3.7 已经发布,但稳定版 VS Code 使用的是旧版本。

    尝试 + Shift + p 并选择 Select TypeScript Version。如果不是 3.7+,那就是问题所在。最简单的解决方法是安装ms-vscode.vscode-typescript-next 扩展。它将提供一个夜间 TypeScript 版本供 VS Code 使用(可能需要重新启动 VS Code,仅供参考)。

    当 VS Code 默认获取 TypeScript 3.7+ 时,您需要记住删除扩展。

    更多详情请见https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-newer-typescript-versions

    【讨论】:

    • 是的,这很奇怪,我有 3.8,但编译器使用本地版本 (3.6) 不符合我的选择。最终只是删除了本地打字稿并在本地安装了更新的版本
    【解决方案3】:

    使用命令查找打字稿版本

    tsc -v
    

    如果它与工作区版本不匹配,您需要使用以下命令全局安装 typescript 最新版本。

    npm install typescript@latest -g 
    

    npm update typescript@3.7 -g
    

    注意:这是如果您正在处理单个项目。如果您使用多个项目,请使用 Visual Studio 代码扩展。 谢谢@cameron

    【讨论】:

    • 我不建议全局安装 typescript,因为它可能会将您正在处理的每个项目锁定到同一版本。相反,您应该通过配置编辑器、在脚本中引用它或使用$(npm bin) 来使用安装到本地node_modules 中的版本。
    【解决方案4】:

    所以我在 2022 年的 4.5.5 版本上遇到了这个问题。对我来说,问题是在 vscode 中安装了错误的 Prettier,所以如果你收到这个错误,值得检查输出控制台中抛出错误的下拉菜单,打字稿或更漂亮的 My issue in 2022

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2020-03-08
      • 1970-01-01
      • 2020-08-21
      • 2020-11-26
      • 2020-03-02
      • 2020-01-24
      • 2023-04-05
      • 2020-11-29
      相关资源
      最近更新 更多