TypeScript选项‘importsNotUsedAsValues‘和‘preserveValueImports‘弃用

这篇具有很好参考价值的文章主要介绍了TypeScript选项‘importsNotUsedAsValues‘和‘preserveValueImports‘弃用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TypeScript 从5.0开始,选项“importsNotUsedAsValues”和“preserveValueImports”已经被标记为Deprecated,并将在TypeScript5.5之后停止支持,可以使用“verbatimModuleSyntax”选项替代。

默认情况下,假如你在TypeScript中写下如下代码:

import { Car } from "./car";
export function drive(car: Car) {
  // ...
}

TypeScript检测到您只对类型定义导入,就会完全删除导入。输出的JavaScript可能如下:

export function drive(car) {
  // ...
}

如果 ./car 文件中仅仅定义了type 或者interface,转换为javascript时这些定义被抛弃,是正确。但是,如果 ./car中的Car是一个class,里边还包括了一些其他定义。这个文件被抛弃。最终的javascript可能会产生Runtime error。

importsNotUsedAsValues选项就解决了这个问题。

此标志控制导入的工作方式,有三种不同的选项:

  • remove:丢弃没有使用的import。【默认值】
  • preserve:保留所有的import,即使从来没有使用过的定义。
  • error:基本上和preserve选项一致,但是,当值(value)被import仅用作 type 时会报错。如果您希望确保没有意外导入任何值,此时可以使用此选项。

preserveValueImports作用:

例如:

import { Animal } from "./animal.js";
eval("console.log(new Animal().isDangerous())");

这样的代码编译器不知道是否该保留还是该抛弃。如果想保留,请使用preserveValueImports选项

importsNotUsedAsValues、preserveValueImports还有一个isolatedModules共三个选项,比较难以理解,有时候使用时仍旧有一些边缘情况导致非期盼的结果。

从TypeScript5.0开始,引入了verbatimModuleSyntax选项(值为 true,false)。使用type修饰符,就明确保留还是抛弃,以简化以上情况。

  • 任何不带类型修饰符的导入或者导出都会被保留。
  • 任何使用类型修饰符的内容都将被完全删除。
// This statement can be dropped entirely in JS output
import type * as car from "./car";

// The named import/export 'Car' can be dropped in JS output
import { type Car } from "./car";
export { type Car } from "./car";

// Erased away entirely.
import type { A } from "a";
// Rewritten to 'import { b } from "bcd";'
import { b, type c, type d } from "bcd";
// Rewritten to 'import {} from "xyz";'
import { type xyz } from "xyz";

使用此选项后,实现了所见即所得。有type修饰符的,明确只使用了定义,编译时直接抛弃;没有使用type修饰符的,编译时就会保留其内容。

一般情况下,vscode会首先使用自带的TypeScript版本。最近升级后TypeScipt默认都会是5.X版本。

如果想继续使用5.x版本,增加一个选项:
在tsconfig.json 中增加 "ignoreDeprecations": "5.0",就不再报警了。

或者直接设置verbatimModuleSyntax为false。

项目如果想切换到4.X版本:

切换TypeScript版本:首先确保在本项目已经有TypeScript4.x
如果没有可以 npm install typescript @4.9
然后

第一种方法:快捷键:Ctrl + Shift + P 然后输入 Typescript: Select Typescript Version,选择本项目的版本。
第二种方法:打开一个ts或者tsx文件。右下角有TypeScript JSX字样,在左边的{ }上,鼠标悬停,在弹窗中点击目前的TypeScript版本。然后会让选择新的TypeScript版本。

OK,切换成功。文章来源地址https://www.toymoban.com/news/detail-416395.html

到了这里,关于TypeScript选项‘importsNotUsedAsValues‘和‘preserveValueImports‘弃用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Security 5.7.0弃用 WebSecurityConfigurerAdapter

    官网博客说明 官网博客链接地址:https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter 在 Spring Security 5.7.0-M2 ,我们弃用了 WebSecurityConfigurerAdapter ,因为我们鼓励用户转向使用基于组件的安全配置。 为了帮助大家熟悉这种新的配置风格,我们编制了一份常见

    2024年02月02日
    浏览(34)
  • Spring Boot 正式弃用 Java 8。。

    大家好,我是R哥。 关注 Spring 框架的都知道,因为 Spring 6.0 要求最低 JDK 17+,所以 Spring Boot 3.0 也必须 JDK 17+ 了 ,但是 3.0 出来的时候,一站式生成项目还是可以选 Java 8 的,如下图所示: 这是 Spring 提供的 一站式生成 Spring 应用的网站 ,这个网站可以帮助开发人员一键生成

    2024年02月04日
    浏览(38)
  • Spring Security - 如何修复 WebSecurityConfigurerAdapter 已弃用

    在这篇简短的文章中,我想分享如何摆脱在带有Spring Security的基于Spring的应用程序中的“ WebSecurityConfigurerAdapter类型已被弃用 ”的警告。也许你习惯于有一个Spring配置类来扩展 WebSecurityConfigurerAdapter 抽象类,如下所示:这对于Spring Security版本5.6.5或更早版本,或者Spring Boot版本

    2024年02月01日
    浏览(34)
  • SpringSecurity学习记录(WebSecurityConfigurerAdapter被弃用,SecurityConfig新玩法)

    目录 0、写在前面 1、简介 2、起步 3、认证 3.1、认证流程的理解 3.2、认证思路 3.3、认证实现 4、授权 4.1、授权的介绍 4.2、授权的实现 5、写在最后         项目要用,本人不会,遂有此文。仅用于个人交流学习使用,侵权删。         SpringSecurity 是一个安全管理框架,和

    2024年02月07日
    浏览(43)
  • Python自动化我选DrissionPage,弃用Selenium

    DrissionPage 是一个基于 python 的网页自动化工具。 它既能控制浏览器,也能收发数据包,还能把两者合而为一。 可兼顾浏览器自动化的便利性和 requests 的高效率。 它功能强大,内置无数人性化设计和便捷功能。 它的语法简洁而优雅,代码量少,对新手友好。 以下是我使用

    2024年01月19日
    浏览(33)
  • K8s 为什么要弃用 Docker

    最近在学习容器技术的过程中,看到有关于Kubernetes“弃用 Docker”的事情,担心现在学 Docker 是否还有价值,是否现在就应该切换到 containerd 或者是其他 runtime。 随着深入了解,这些疑虑的确是有些道理。三年前,Kubernetes 放出消息要“弃用 Docker”的时候,确确实实在 Kuberne

    2024年02月12日
    浏览(55)
  • vscode | linux | c++ intelliense 被弃用解决方案

    每日一句,vscode用的爽是爽,主要是可配置太强了。如果也很会研究,可以直接去咸鱼接单了 废话少说,直接整。 用着用着说是c++ intelliense被弃用,很多辅助功能无法使用,像查看定义、查看引用、函数跳转、智能提示…… 归根结底,还是太菜了,但真的很需要这些辅助啊

    2024年02月12日
    浏览(49)
  • 弃用 Docker 后!哪几种超好用的容器工具能替代?

    2020 年底,Kubernetes 发布了公告,官方宣布从 v1.24 开始停止对 Docker 的支持。然而,Kubernetes 弃用 docker 对我们的影响不应过于恐慌。 有以下几种工具可以替代 Docker ?并且相比 Docker 都有哪些优点? containerd是一个轻量级容器守护进程,它提供了一个标准的容器API,可以管理容

    2024年02月04日
    浏览(38)
  • 亚马逊宣布弃用低代码,Honeycode 服务即将停止。

    AWS 宣布终止低代码服务 Honeycode。新客户不能注册或升级账户计划,现有客户的应用程序将在 2024 年 2 月 29 日前继续运行。在 2023 年 7 月 31 日之后,用户将不再需要支付 Honeycode 使用费。 Honeycode 是一项于2020年6月推出的完全托管服务,该服务使得一些不会编码的人员也能够在

    2024年02月10日
    浏览(37)
  • Android Handler被弃用,那么以后怎么使用Handler,或者类似的功能

    Android API30左右,Android应用在使用传统写法使用Handler类的时候会显示删除线,并提示相关的方法已经被弃用,不建议使用。 Android studio中的显示和建议: 看下官方API关于此处的解释:  简要说就是如果在实例化Handler的时候不提供Looper, 可能导致操作丢失(Handler 没有预估到新

    2023年04月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包