typescript 将类型脚本字符串文本联合中的一个(或多个)值注解为已弃用

62lalag4  于 2023-03-19  发布在  TypeScript
关注(0)|答案(3)|浏览(148)

我知道可以将整个属性注解为deprecated,但是是否可以将字符串联合中的一个(或多个)单个值注解为deprecated?
例如,给定以下类型声明:

export type BoxProps = HTMLAttributes<HTMLDivElement> & {
  /**
   * @deprecated rounded has no effect and will be removed in a future version
   */
  rounded?: boolean;
  variant?:
    | 'neutral'
    | 'grey'
    | 'success'
    | 'warning';
  thickBorder?: boolean;
};

...我的IDE(VS代码)将警告我rounded参数已弃用,并将其显示为“已删除”。
但是,如果我尝试注解variant字符串文字联合类型的单个值,IDE将建议所有可能的选项,而不会显示警告或视觉处理,以指示任何字符串已弃用:

TypeScript
export type BoxProps = HTMLAttributes<HTMLDivElement> & {
  /**
   * @deprecated rounded has no effect and will be removed in a future version
   */
  rounded?: boolean;
  variant?:
    | 'neutral'
    /** @deprecated */
    | 'grey'
    | 'success'
    | 'warning';
  thickBorder?: boolean;

// or 

TypeScript
export type BoxProps = HTMLAttributes<HTMLDivElement> & {
  /**
   * @deprecated rounded has no effect and will be removed in a future version
   */
  rounded?: boolean;
  variant?:
    | 'neutral'
    | 'grey' /** @deprecated */
    | 'success'
    | 'warning';
  thickBorder?: boolean;
};

// or 

TypeScript
export type BoxProps = HTMLAttributes<HTMLDivElement> & {
  /**
   * @deprecated rounded has no effect and will be removed in a future version
   */
  rounded?: boolean;
  variant?:
    | 'neutral'
    | /** @deprecated */ 'grey' 
    | 'success'
    | 'warning';
  thickBorder?: boolean;
};

这是不可能的吗?或者需要使用其他语法来注解单个字符串为已弃用?(或者我缺少VS代码插件吗?)

xurqigkl

xurqigkl1#

@depecated支持已随TS 4.0 in 2020一起提供。
the ticket上对此进行了讨论,但目前没有联合和插入类型成员不支持TSDoc。

flvtvl50

flvtvl502#

我不认为这是可能的TSDoc在Visual Studio代码。我已经尝试过在我的IDE(Visual Studio代码),没有成功。
然而,GitHub的一个问题是关于函数参数的相同问题。即使它不是联合类型,它可能会有一点帮助。

czq61nw1

czq61nw13#

我也在尝试做同样的事情,并通过创建一个更高级别的联盟(不确定该模式的“正式名称”)取得了一些成功,如下所示:
这是所有未弃用属性的完整类型

export type BoxProps = HTMLAttributes<HTMLDivElement> & {
  /**
   * @deprecated rounded has no effect and will be removed in a future version
   */
  rounded?: boolean;
  variant?:
    | 'neutral'
    | 'success'
    | 'warning';
  thickBorder?: boolean;
};

这是您将应用于Box组件的类型,方法是创建原始类型的组合,然后创建一个非常窄的类型,该类型仅包含您要弃用的嵌套联合中的值。

type BoxPropsWithBackwardsCompatibility =
  | BoxProps
  | (Omit<BoxProps, 'variant'> & {
      /**
       * @deprecated Use `neutral` instead of `grey`
       */
      intent: 'grey';
    });

我可能有我的VS代码配置错误,因为我没有看到一个错误,但我看到了弃用通知时,悬停的 prop 。

相关问题