Open yunliuyan opened 11 months ago
遍历key值,判断key是否继承T
type MyPick<T, K> = {
[key in keyof T as key extends K ? key : never]: T[key]
}
type EasyPick<T, U> = {
[k in keyof T]: k extends U ? T[k] : never;
};
interface deepReadonlyType {
name: string;
description: string;
address: string;
}
const easyPickTest: EasyPick<deepReadonlyType, 'name' | 'description'> = {
name: "字节猿", // Ok
description: "字节猿喜欢readonly", // Ok
address: "我家在陕西", // Error: The expected type comes from property 'address' which is declared here on type 'EasyPick<deepReadonlyType, "name" | "description">'
};
type MyPick<T, P extends keyof T> = {
}
interface Todo { title: string description: string completed: boolean }
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
const todo: TodoPreview = { title: 'Clean room', completed: false, }
type MyPick<T, K extends keyof T> = {
[P in K]: T[P];
};
type MyPick<T, K extends keyof T> = { [key in K]: T[key] }
interface Todo5 {
title: string
description: string
completed: boolean
}
type TodoPreview = MyPick<Todo5, 'title' | 'completed'>
const todo5: TodoPreview = {
title: 'Clean room',
completed: false,
}
实现 Pick
![#built-in](https://img.shields.io/badge/-%23built--in-999)
实现 TS 内置的
Pick<T, K>
,但不可以使用它。从类型
T
中选择出属性K
,构造成一个新的类型。例如:
测试案例:
相关挑战