打字稿是不是允许接口和字符串联合类型?

     2023-03-13     48

关键词:

【中文标题】打字稿是不是允许接口和字符串联合类型?【英文标题】:Does typescript allow interface and string union types?打字稿是否允许接口和字符串联合类型? 【发布时间】:2018-12-07 00:41:22 【问题描述】:

我正在尝试实现一个类似的方法,该方法采用一个关键参数,即string 或可索引类型接口IValidationContextIndex 的实例。实现如下所示:

  /**
   * Gets all ValidationContext container values.
   * @returns An array of ValidationContext instances contained in the cache.
   */
  public static getValidationContextValues(key: IValidationContextIndex | string ): Array<ValidationContext> 
    if (key instanceof IValidationContextIndex ) [
      return Object.values(<any> key);
    ]
    else 
      const vci = ValidationContainer.cache[<string>key];
      return Object.values(<any> vci);
    
    

Typescript 为 if 块提供以下错误:

[ts] 'IValidationContextIndex' 仅指一种类型,但在这里用作值。

关于如何解决这个问题的任何想法?

对于大多数界面,我认为可以添加type 属性(type: 'IValidationContextsIndex'; ),但在这种情况下不起作用,因为接口是可索引类型的接口 ....

【问题讨论】:

你可以使用任何类型 如果我执行 key: any 并执行 instanceof 检查,我仍然会收到相同的错误... 请记住,一旦您转译为 javascript,接口和类型就会消失。这些用于您的代码检查和 linting。不是为了你的最终结果。 是的,我理解那部分 - 基本上界面已经消失了,所以 Typescript 就像“伙计,我没有......” 也许这会有所帮助:***.com/a/40718205/1497533 【参考方案1】:

没有一种方法可以在运行时检查 typescript 中的类型,因为几乎所有东西都在转译后变成了一个对象,所以你可能需要按照user-defined typed guards 的定义来做一些事情

【讨论】:

【参考方案2】:

我认为这可以做到(根据@indrakumara 的提示):

    /**
     * Gets all ValidationContext container values fpr a 
     * Object_property string valued key or a key that is an instance of 
     * IValidationContextIndex).
     * @returns An array of ValidationContext instances contained in the cache that corresponds to a specific Object_property key.
     */
    public static getValidationContextValues(key: any ): Array<ValidationContext> 
      if (typeof key === `string` ) 
        const vci = ValidationContainer.cache[<string>key];
        return Object.values(<any> vci);
      
      else 
        return Object.values(<IValidationContextIndex> key);
      
      

【讨论】:

【参考方案3】:

typescript 中的接口不会转译为 javascript 中的任何代码。因此,在您的代码“instanceof IValidationContextIndex”中,javascript 中不存在 IValidationContextIndex。

将您的接口更改为类或有一个实现该接口的类,然后检查传递的参数是否是该类的实例。

【讨论】:

检查实例是否为字符串会更容易一些,如果不是,则假设它是接口的实例......所以我作弊了一点,但它很轻量级并且有效.. .我认为当联合类型由多个接口组成时,你的方式会很健壮......

将打字稿接口属性类型转换为联合[重复]

】将打字稿接口属性类型转换为联合[重复]【英文标题】:Turntypescriptinterfacepropertytypesintounion[duplicate]【发布时间】:2022-01-0417:56:23【问题描述】:我有这个接口,我想根据它包含的键类型生成一个新类型。interfaceSomeTypeabc:string;d... 查看详情

打字稿:将标记的联合转换为联合类型

】打字稿:将标记的联合转换为联合类型【英文标题】:Typescript:convertataggedunionintoanuniontype【发布时间】:2020-10-1620:21:21【问题描述】:我有以下标记的联合接口interfaceExamplea:TypeA;b:TypeB;作为输出,我想将此标记的联合转换为联... 查看详情

差异联合类型和区分联合打字稿/ F#

】差异联合类型和区分联合打字稿/F#【英文标题】:Differenceuniontypesanddiscriminatedunionstypescript/F#【发布时间】:2020-08-2201:50:48【问题描述】:所以我正在阅读关于联合类型的Typescript官方文档,我认为它与F#中的“可区分联合”相... 查看详情

“联合类型值到字符串的映射”的打字稿类型?

】“联合类型值到字符串的映射”的打字稿类型?【英文标题】:Typescripttypefor"mapofuniontypevaluestostrings"?【发布时间】:2020-06-0710:17:46【问题描述】:有一个type定义如下:typeComponentType=\'CPU\'|\'Motherboard\'|\'Memory\'|\'PSU\'。我... 查看详情

打字稿从元组/数组值派生联合类型

】打字稿从元组/数组值派生联合类型【英文标题】:Typescriptderiveuniontypefromtuple/arrayvalues【发布时间】:2017-12-2807:58:14【问题描述】:说我有清单constlist=[\'a\',\'b\',\'c\']是否可以从\'a\'|\'b\'|\'c\'这个值联合类型派生?我想要这个是... 查看详情

在打字稿中获取枚举键作为联合字符串的通用类型?

】在打字稿中获取枚举键作为联合字符串的通用类型?【英文标题】:Generictypetogetenumkeysasunionstringintypescript?【发布时间】:2018-05-1617:36:15【问题描述】:考虑以下打字稿枚举:enumMyEnumA,B,C;如果我想要另一种类型,即该枚举的键... 查看详情

打字稿中具有联合类型键的松散类型对象

】打字稿中具有联合类型键的松散类型对象【英文标题】:Looselytypedobjectwithuniontypekeyintypescript【发布时间】:2020-04-1905:03:45【问题描述】:我正在尝试使用联合类型键创建松散类型对象的接口。exporttypeObjectsType=\'text\'|\'image\'|\'c... 查看详情

打字稿:联合类型字段的约束

】打字稿:联合类型字段的约束【英文标题】:Typescript:Constraintonafieldofanuniontype【发布时间】:2021-10-0422:52:42【问题描述】:我创建了一个联合类型的对象。它们都有一个字段role来区分它们。这里有老师和学生:typeUser=role:"stude... 查看详情

打字稿:允许泛型类型仅是具有“字符串”属性的对象

】打字稿:允许泛型类型仅是具有“字符串”属性的对象【英文标题】:Typescript:allowagenerictypetoonlybeanobjectwith\'string\'properties【发布时间】:2019-03-1014:35:21【问题描述】:我想知道是否可以在TS中强制执行泛型的属性类型。我只... 查看详情

函数的打字稿联合/交集类型

】函数的打字稿联合/交集类型【英文标题】:Typescriptunion/intersectiontypesforfunctions【发布时间】:2022-01-1309:49:47【问题描述】:当我有不同数量的参数和返回类型时,我试图了解如何指定类型(对于函数)。这个函数可以:接受2... 查看详情

类型为 String 时如何在 DB 中查找项目 |使用打字稿联合类型的字符串 []

...类型为String时如何在DB中查找项目|使用打字稿联合类型的字符串[]【英文标题】:HowtolookforaniteminDBwhenthetypeisString|String[]usingtypescriptuniontypes【发布时间】:2021-12-2810:46:33【问题描述】:我正在调用一个方法sendEmail,它向单个用户... 查看详情

从类型联合定义打字稿函数签名[重复]

】从类型联合定义打字稿函数签名[重复]【英文标题】:Definetypescriptfunctionsignaturefromunionoftypes[duplicate]【发布时间】:2021-01-0708:45:14【问题描述】:我想从类型的联合中定义一个函数的类型:typeMyEvent=|type:\'hello\',payload:|type:\'start... 查看详情

无法让嵌套类型保护与打字稿中的联合类型一起使用

】无法让嵌套类型保护与打字稿中的联合类型一起使用【英文标题】:Unabletogetnestedtypeguardstoworkwithuniontypesintypescript【发布时间】:2019-10-1910:17:10【问题描述】:我正在尝试通过删除任何虚假/错误值来清理数据,然后再将其传递... 查看详情

打字稿联合类型具有误导性[关闭]

】打字稿联合类型具有误导性[关闭]【英文标题】:Typescriptuniontypesismisleading[closed]【发布时间】:2018-07-0422:04:29【问题描述】:按照代码sn-p:interfacePalPayemail:string;someCode:string;interfaceCreditCardcardNumber:string;securityCode:string;constpayment... 查看详情

在这种情况下,打字稿可以做联合类型断言吗?

】在这种情况下,打字稿可以做联合类型断言吗?【英文标题】:cantypescriptdouniontypeassertioninthiscase?【发布时间】:2020-09-3023:06:45【问题描述】:在这种情况下打字稿可以做联合类型断言吗?我想使用ab.a或ab.b或ab.hasOwnProperty来断... 查看详情

打字稿:对象和原语之间的keyof typeof联合总是永远不会

】打字稿:对象和原语之间的keyoftypeof联合总是永远不会【英文标题】:Typescript:keyoftypeofunionbetweenobjectandprimitiveisalwaysnever【发布时间】:2019-02-1218:00:35【问题描述】:首先,我的问题的一些上下文:我有一个项目,我通过Socket.I... 查看详情

打字稿:你如何用布尔或回调函数定义联合类型?

】打字稿:你如何用布尔或回调函数定义联合类型?【英文标题】:Typescript:howdoyoudefineauniontypewithbooleanoracallbackfunction?【发布时间】:2019-03-2019:17:39【问题描述】:如何为回调函数或布尔值设置联合类型?我试过这个,但我得到... 查看详情

获取/提取作为联合类型中的类型之一的类型的类型 - 打字稿

】获取/提取作为联合类型中的类型之一的类型的类型-打字稿【英文标题】:Get/extractthetypeofatypethatisoneofthetypesinauniontype-typescript【发布时间】:2021-12-3017:44:13【问题描述】:给定一个存在于生成文件中的联合类型:exporttypeUnionedT... 查看详情