关键词:
【中文标题】打字稿是不是允许接口和字符串联合类型?【英文标题】: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... 查看详情