当前位置:首页 » 《随便一记》 » 正文

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

9 人参与  2023年05月05日 16:57  分类 : 《随便一记》  评论

点击全文阅读


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 outputimport type * as car from "./car";// The named import/export 'Car' can be dropped in JS outputimport { 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",就不再报警了。

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

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

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

OK,切换成功。


点击全文阅读


本文链接:http://zhangshiyu.com/post/60969.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 全文无端却被春风误全书+后续(孟南汐宋祁钰)_(全文无端却被春风误全书+后续)孟南汐宋祁钰列表(全文无端却被春风误全书+后续)
  • 皇帝决定选择穿越女后,皇后娘娘登基了孟承霄穆清越沈织桐完本_皇帝决定选择穿越女后,皇后娘娘登基了(孟承霄穆清越沈织桐)
  • 无端却被春风误全面完结列表_无端却被春风误全面完结(孟南汐宋祁钰)
  • 潮起时问归期江以蓁陆临深完本_潮起时问归期(江以蓁陆临深)
  • 全书浏览陪嫁五百亿,不嫁港圈嫁京圈+后续+结局(封清凝闻谦白静姝)_陪嫁五百亿,不嫁港圈嫁京圈+后续+结局(封清凝闻谦白静姝)全书结局
  • 潮起时问归期爆火全网(江以蓁陆临深)_潮起时问归期爆火全网
  • [愿我如星君如月,夜夜流光却别离]小说节选推荐_[李承泽沈茵小姐]节选试读
  • 他站在回忆尽头沈辞安+整本(乔若兮沈辞安)全书浏览_他站在回忆尽头沈辞安+整本全书浏览
  • 全文无端却被春风误全书+后续+结局(孟南汐宋祁钰)列表_全文无端却被春风误全书+后续+结局
  • (番外)+(全书)沈青禾霍沉洲(此去经年人未还沈青禾全书+结局)_(沈青禾霍沉洲)列表_笔趣阁(此去经年人未还沈青禾全书+结局)
  • 全书浏览再见八零离婚后我改嫁团长完结爽文(时雨沈宴臣)_再见八零离婚后我改嫁团长完结爽文(时雨沈宴臣)全书结局
  • 全文爱恨皆虚妄结局(傅宴安霍青夏)列表_全文爱恨皆虚妄结局

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1