相关疑难解决方法(0)

TypeScript:将键值类型反向映射到值键

给定一个类型的对象:

type Key2Value = {
  foo: "bar"
  voo: "doo"
}
Run Code Online (Sandbox Code Playgroud)

假设该类型的值始终是字符串类型,那么如何构造一个ReverseMap<T>将键值对反向映射到值键对的实用程序类型?

type Value2Key = ReverseMap<Key2Value>
// yields:
type Value2Key = {
  bar: "foo"
  doo: "voo"
}
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
4499
查看次数

如何在 TypeScript 中强制两种类型不兼容?

我想在 TypeScript 中创建两种类型,它们都是数字:

export type GlobalPortIndex = number;
export type TypePortIndex = number;
Run Code Online (Sandbox Code Playgroud)

据我了解,TypeScript 会认为它们是相互兼容的,因为它们完全重叠。

但我希望它们不兼容,所以当我输入某些内容时GlobalPortIndex,如果我尝试TypePortIndex为其分配 a ,我会收到类型错误。这是为了确保我不会在代码中将它们混淆,例如我无法将其中一个传递给需要另一个的函数。

有什么 TypeScript 技巧可以实现这一点吗?

types typing typescript

5
推荐指数
1
解决办法
666
查看次数

在Typescript中将两种类型完美地组合成一个界面

我的目标

我有一个字符串,enum E并且具有一interface I组相同的键。我想构造一个新的映射类型。对于每个共享密钥k,它应使用枚举值E.k作为属性名称。成员的类型I.k应该是此新属性的类型。

我的用例的一些背景/动机

我从REST API获取对象。我无法改变他们的结构。由于遗留原因,对象的键名非常难以阅读且难看(我FooNames在示例中对此进行了模拟)。这使开发过程痛苦不堪,并不必要地增加了代码错误,但在使用这些对象并对其进行操作时,在理解上却更为关键。

我们使用自己的干净接口(通过via模拟"first" | "second" | "third")隐藏了这些名称。但是,将对象写回后端时,它们需要再次具有“丑陋”的结构。对象类型有几十种(每种类型具有不同的字段集),这使得处理混乱的字段名称变得如此痛苦。

我们正在尝试最小化冗余-同时仍通过TS编译器进行静态类型和结构检查。因此,基于现有抽象触发类型检查的映射类型将非常有帮助。

代码示例

可以将BackendObject以下类型以某种方式在Typescript中实现为映射类型吗?到目前为止,我还没有找到方法。有关此问题中的所有代码,请参见此操场

// Two simple abstractions per object type, e.g. for a type Foo....
enum FooNames {
  first = 'FIRST_FIELD',
  second = 'TT_FIELD_SECOND',
  third = 'third_field_33'
}
interface FooTypes {
  first: string,
  second: number,
  third: boolean
}
// ... allow for generic well-formed objects with structure …
Run Code Online (Sandbox Code Playgroud)

generics types typescript typescript-generics

3
推荐指数
1
解决办法
853
查看次数