【问题标题】:Is there a way to disable Weak Type Detection introduced with Typescript Version 2.4?有没有办法禁用 Typescript 2.4 版引入的弱类型检测?
【发布时间】:2018-02-24 12:32:46
【问题描述】:

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

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

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

【问题讨论】:

  • 你找到方法了吗?我真的不知道为什么编译器选项中不能有一个标志。因为推荐的解决方法并不总是符合建议。
  • @Fis 不,很遗憾没有。我们最终解决了这个问题。

标签: typescript types weak-typing typescript2.4


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    普通的 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
    

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 2022-01-06
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2021-02-10
      • 1970-01-01
      相关资源
      最近更新 更多