当前位置: 首页 > 知识库问答 >
问题:

映射类型:删除可选修饰符

咸疏珂
2023-03-14

给定此代码

interface Foo{
  one?: string;
  two?: string;
}

type Foo2 = {
  [P in keyof Foo]: number;
}

我希望Foo2的类型为{一:数字;二:数字;}然而,它似乎保留了可选的修饰符{one?:number;two?:number;}

在使用映射类型时,是否可以删除可选的修饰符?


共有3个答案

谭富
2023-03-14

我可能会建立自己的实用程序

interface Foo {
  one?: string;
  two?: string;
}

type RequiredWithType<T, V> = {
  [P in keyof T]-?: V;
}

// and then just use it
type Foo2 = RequiredWithType<Foo, Number>;

我在这里写了一篇关于映射类型的中型文章,你会觉得很有趣:)

支阳波
2023-03-14

您可以使用< code>Required

interface Foo {
  one?: string;
  two?: string;
}

type Foo2 = {
  [P in keyof Required<Foo>]: number;
};
巫晋鹏
2023-03-14
匿名用户

在Typecript 2.8中,您可以显式消除修饰符:

type Foo2 = {
  [P in keyof Foo]-?: number;
}

或者使用新版本中内置的< code>Required类型。

如果您使用的是旧版本,可以使用以下解决方法:

type Helper<T, TNames extends string> = { [P in TNames]: (T & { [name: string]: never })[P] };
type Foo3 = Helper<Foo, keyof Foo>;

 类似资料:
  • C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。 下面列出了数据类型修饰符: signed unsigned long short 修饰符 signed、unsigned、long 和 short 可应用于整型,signed 和 unsigned 可应用于字符型,long 可应用于双精度型。 修饰符 signed

  • 修饰符是您添加到这些定义以更改其含义的关键字。 Java语言有各种各样的修饰符,包括以下内容 - Java Access Modifiers 非访问修饰符 要使用修饰符,请在类,方法或变量的定义中包含其关键字。 修饰符位于语句的其余部分之前,如下例所示。 例子 (Example) <i>public</i> class className { // ... } <i>private</i>

  • 类型映射 web3j中使用的原生Java到ABI类型映射如下: boolean -> bool BigInteger -> uint/int byte[] -> bytes String -> string and address types List<> -> dynamic/static array BigInteger类型必须用于数字类型,因为Ethereum以太坊中的数字类型是256位整数

  • 按照第二个链接中包含的示例,我已经测试了: 但我没有实现使用。

  • private private修饰符是我们使用的最限制的修饰符。它表示它只能被自己所在的文件可见。所以如果我们给一个类声明为private,我们就不能在定义这个类之外的文件中使用它。 另一方面,如果我们在一个类里面使用了private修饰符,那访问权限就被限制在这个类里面了。甚至是继承这个类的子类也不能使用它。 所以一等公民,类、对象、接口……(也就是包成员)如果被定义为private,那么它们只

  • TypeScript 会将一些好用的工具类型纳入基准库中,方便开发者直接使用,本节介绍的映射类型就是这样的工具类型。 对这种工具类型,我们不只要知道使用方法,还要了解其实现功能的本质。本节我们会从源码进行分析,逐步掌握。 1. 慕课解释 映射类型可以将已知类型的每个属性都变为可选的或者只读的。 2. Readonly 与 Partial 关键字 先来看这样一个任务:将 Person 接口的每个属性