6

在 Typescript 2.4 版中添加了弱类型检测。现在我同意这是一个很棒的功能,当您将值分配给没有与该类型的可选属性匹配的单个属性的类型时,它将有助于捕获一大堆错误。

不幸的是,对于一个最初用 Javascript 编写然后迁移到 Typescript 的大型项目,将存在使用弱类型漏洞的情况。

为了允许轻松迁移到 TS 2.4,然后逐步删除所有弱类型攻击 - 是否有人知道标志或黑客可以暂时禁用弱类型检测?

4

2 回答 2

0

通常在与完整的可选类型(也就是只有可选属性的对象)相交时会引发此错误。

有时在编写通用库代码时,这是您想要做的事情,即使交集也会导致完全可选类型。

普通 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
于 2021-09-21T15:13:58.900 回答
0

没有编译器标志,但我可以推荐你ts-migrate。它将您现有的 js 转换为 ts 代码,any其中推理不起作用。

于 2020-09-04T15:49:53.037 回答