字符集 - charset
在 TypeScript 的早期版本中,此选项用于控制从磁盘读取文本文件时使用的编码。现在,TypeScript 默认使用 UTF-8 编码,但会正确检测 UTF-16(BE 和 LE)或 UTF-8 的 BOM。
已废弃
默认值:utf8
发布版本:1.0
未用作值的导入 - importsNotUsedAsValues
已被 verbatimModuleSyntax 取代。
此标志控制 import 的工作方式,有 3 个不同的选项:
remove:默认行为,删除仅引用类型的 import 语句。preserve:保留所有值或类型从未使用的 import 语句。这可能导致导入/副作用被保留。error:保留所有导入(与 preserve 选项相同),但当值导入仅用作类型时会报错。如果你想确保没有意外导入值,但仍然希望明确副作用导入,这可能会很有用。
此标志之所以有效,是因为你可以使用 import type 来显式创建一个永远不应该被编译到 JavaScript 中的导入语句。
默认值:remove
允许值:
removepreserveerror
相关配置:
- preserveValueImports
- verbatimModuleSyntax
发布版本:3.8
仅字符串键名 - keyofStringsOnly
此标志会改变 keyof 类型运算符的行为,当应用于具有字符串索引签名的类型时,返回 string 而不是 string | number。
此标志用于帮助人们保持 TypeScript 2.9 发布之前的行为。
已废弃
发布版本:2.9
不使用隐式严格模式 - noImplicitUseStrict
你应该不需要这个选项。默认情况下,当将模块文件编译到非 ES6 目标时,TypeScript 会在文件顶部生成 “use strict” 序言。此设置会禁用该序言。
发布版本:1.8
不进行严格泛型检查 - noStrictGenericChecks
TypeScript 在比较两个泛型函数时会统一类型参数。
type A = <T, U>(x: T, y: U) => [T, U]; type B = <S>(x: S, y: S) => [S, S]; function f(a: A, b: B) { b = a; // 正确 a = b; // 错误 // 类型 'B' 不能赋值给类型 'A'。 // 参数 'y' 和 'y' 的类型不兼容。 // 类型 'U' 不能赋值给类型 'T'。 // 'T' 可能被实例化为与 'U' 不相关的任意类型。 }
此标志可用于移除该检查。
发布版本:2.5
输出 - out
请使用 outFile 代替。
out 选项以不可预测或不一致的方式计算最终文件位置。此选项仅为向后兼容性而保留,已被废弃。
已废弃
相关配置:
- outDir
- outFile
发布版本:1.0
保留值导入 - preserveValueImports
已被 verbatimModuleSyntax 取代。
在某些情况下,TypeScript 无法检测到你正在使用导入。例如,以下代码:
import { Animal } from "./animal.js"; eval("console.log(new Animal().isDangerous())");
或者使用”编译到 HTML”的语言,如 Svelte 或 Vue。preserveValueImports 将阻止 TypeScript 删除导入,即使它看起来未被使用。
当与 isolatedModules 结合使用时:导入的类型必须标记为仅类型,因为一次处理单个文件的编译器无法知道看起来未使用的导入是值,还是必须删除以避免运行时崩溃的类型。
相关配置:
- isolatedModules
- importsNotUsedAsValues
- verbatimModuleSyntax
发布版本:4.5
禁止过量属性错误 - suppressExcessPropertyErrors
此选项禁用过量属性错误的报告,如以下示例所示:
type Point = { x: number; y: number }; const p: Point = { x: 1, y: 3, m: 10 }; // 对象字面量只能指定已知属性,并且 'm' 在类型 'Point' 中不存在。
此标志是为了帮助人们迁移到 TypeScript 1.6 中更严格的新对象字面量检查。
我们不建议在现代代码库中使用此标志,你可以使用 // @ts-ignore 来抑制需要的一次性情况。
发布版本:1.6
禁止隐式任意索引错误 - suppressImplicitAnyIndexErrors
启用 suppressImplicitAnyIndexErrors 将禁止报告关于对象索引隐式 any 的错误,如以下示例所示:
const obj = { x: 10 }; console.log(obj["foo"]); // 元素隐式具有 'any' 类型,因为类型为 '"foo"' 的表达式不能用于索引类型 '{ x: number; }'。 // 属性 'foo' 在类型 '{ x: number; }' 上不存在。
使用 suppressImplicitAnyIndexErrors 是一种相当激进的方法。建议使用 @ts-ignore 注释代替:
const obj = { x: 10 }; // @ts-ignore console.log(obj["foo"]);
相关配置:
- noImplicitAny
发布版本:1.4