TypeScript:创建一个没有可选属性的新接口

TypeScript:创建一个没有可选属性的新接口,typescript,Typescript,我有一个带有可选属性和必需属性的接口,有没有办法使用此接口创建一个没有任何可选属性的新接口 例如,如果我们有以下接口: interface FirstInterface { name: string, surname?: string, } 在没有可选属性的情况下,如何使用它创建新接口: interface SecondInterface { name: string, } 您可能希望使用提供的TypeScript type secondInterface=Pick //类型se

我有一个带有可选属性和必需属性的接口,有没有办法使用此接口创建一个没有任何可选属性的新接口

例如,如果我们有以下接口:

interface FirstInterface {
  name: string,
  surname?: string,
}
在没有可选属性的情况下,如何使用它创建新接口:

interface SecondInterface {
  name: string,
}

您可能希望使用提供的TypeScript

type secondInterface=Pick
//类型secondInterface=Omit是等效的

顺便说一句,接口应该用PascalCase命名,您可能需要使用提供的TypeScript

type secondInterface=Pick
//类型secondInterface=Omit是等效的
顺便说一句,接口应该用PascalCase命名,这里有一个解决方案:

type RequiredKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T]
type RequiredProperties<T> = Pick<T, RequiredKeys<T>>
type RequiredKeys={[K in keyof T]-?:未定义的扩展T[K]?从不:K}[keyof T]
类型RequiredProperties=Pick
它首先将接口映射到一个类型,如
{name:'name',姓氏:never}
,以提取所需键的名称,然后使用
Pick
仅从原始接口中拾取所需键

然后可以定义
类型SecondInterface=RequiredProperties

这里有一个解决方案:

type RequiredKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T]
type RequiredProperties<T> = Pick<T, RequiredKeys<T>>
type RequiredKeys={[K in keyof T]-?:未定义的扩展T[K]?从不:K}[keyof T]
类型RequiredProperties=Pick
它首先将接口映射到一个类型,如
{name:'name',姓氏:never}
,以提取所需键的名称,然后使用
Pick
仅从原始接口中拾取所需键

然后可以定义
类型SecondInterface=RequiredProperties