在 Typescript 2.4 版中添加了弱类型检测。现在我同意这是一个很棒的功能,当您将值分配给没有与该类型的可选属性匹配的单个属性的类型时,它将有助于捕获一大堆错误。
不幸的是,对于一个最初用 Javascript 编写然后迁移到 Typescript 的大型项目,将存在使用弱类型漏洞的情况。
为了允许轻松迁移到 TS 2.4,然后逐步删除所有弱类型攻击 - 是否有人知道标志或黑客可以暂时禁用弱类型检测?
在 Typescript 2.4 版中添加了弱类型检测。现在我同意这是一个很棒的功能,当您将值分配给没有与该类型的可选属性匹配的单个属性的类型时,它将有助于捕获一大堆错误。
不幸的是,对于一个最初用 Javascript 编写然后迁移到 Typescript 的大型项目,将存在使用弱类型漏洞的情况。
为了允许轻松迁移到 TS 2.4,然后逐步删除所有弱类型攻击 - 是否有人知道标志或黑客可以暂时禁用弱类型检测?
通常在与完整的可选类型(也就是只有可选属性的对象)相交时会引发此错误。
有时在编写通用库代码时,这是您想要做的事情,即使交集也会导致完全可选类型。
普通 TS 交集不会让您与弱类型相交,但您可以自己实现交集:
export type WeakIntersect<T, U> = Record<string, never> extends T
? Record<string, never> extends U
? T & U // fallback to compiler check for weak types
: U
: Record<string, never> extends U
? T
: T & U
FullyOptional1 & FullyOptional2 // error
WeakIntersect<FullyOptional1, FullyOptional2> // ok
extends
在弱类型上使用时也可以避免错误:
export type AllowWeakType<T> = Record<string, never> extends T ? any : T
T extends FullyOptional // error
T extends AllowWeakType<FullyOptional> // ok
没有编译器标志,但我可以推荐你ts-migrate。它将您现有的 js 转换为 ts 代码,any
其中推理不起作用。