首页 > 解决方案 > 是否可以使用打字稿映射类型来制作接口的一种非功能属性?

问题描述

所以我在看 Typescript 的映射类型。是否可以创建一个接口来包装另一种从原始类型中删除函数的类型?例如:

interface Person{
name: string,
age: number,
speak(): void,
}

type Data<T> = ?

const dataPerson: Data<Person> ={
name: "John",
age: 20
//Speak removed because it is a function
};

谢谢!

标签: javascripttypescriptinterfacemapped-types

解决方案


这是来自打字稿文档(https://www.typescriptlang.org/docs/handbook/advanced-types.html#conditional-types)并且有效:

type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
type Data<T> = Pick<T, NonFunctionPropertyNames<T>>;

感谢大家!


推荐阅读