给定一个类型的对象:
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 中创建两种类型,它们都是数字:
export type GlobalPortIndex = number;
export type TypePortIndex = number;
Run Code Online (Sandbox Code Playgroud)
据我了解,TypeScript 会认为它们是相互兼容的,因为它们完全重叠。
但我希望它们不兼容,所以当我输入某些内容时GlobalPortIndex,如果我尝试TypePortIndex为其分配 a ,我会收到类型错误。这是为了确保我不会在代码中将它们混淆,例如我无法将其中一个传递给需要另一个的函数。
有什么 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)