您的位置:首页 > 健康 > 养生 > 上海网站建设平台站霸网络_国庆网页制作素材_企业培训体系搭建_南京网站制作公司

上海网站建设平台站霸网络_国庆网页制作素材_企业培训体系搭建_南京网站制作公司

2025/1/9 9:47:00 来源:https://blog.csdn.net/qq_29896351/article/details/144829862  浏览:    关键词:上海网站建设平台站霸网络_国庆网页制作素材_企业培训体系搭建_南京网站制作公司
上海网站建设平台站霸网络_国庆网页制作素材_企业培训体系搭建_南京网站制作公司

TypeScript 提供了多种实用程序类型,以促进常见的类型转换。这些实用程序在全局范围内可调用,注意:这些API都有返回值,可以做变量或者直接使用。

构建对象

创建一个Sticker接口,拥有如下属性:

interface Sticker {id: number;name: string;createdAt: string;updatedAt: string;submitter: undefined | string;
}

1.Partial

将一个类型的所有属性转换为可选的,此时会引发Sticker所有属性可能为undefined,这是不应该的,需要使用交叉类型来处理。

type StickerUpdateParam = Partial<Sticker>
// type StickerUpdateParam = {
//     id?: number | undefined;
//     name?: string | undefined;
//     createdAt?: string | undefined;
//     updatedAt?: string | undefined;
//     submitter?: undefined | string;
// }

2.Required

创建一个类型,将所有 Type 的可选属性转换为必要的。

type AccessiblePageInfo = Required<StickerUpdateParam>;
// type AccessiblePageInfo = {
//     id: number;
//     name: string;
//     createdAt: string;
//     updatedAt: string;
//     submitter: string;
// }

3.Readonly

将一个类型的所有属性转换为只读的。

type StickerFromAPI = Readonly<Sticker>;
// type StickerFromAPI = {
//     readonly id: number;
//     readonly name: string;
//     readonly createdAt: string;
//     readonly updatedAt: string;
//     readonly submitter: undefined | string;
// }

4.Record<KeysFrom, Type>

创建一个具有 KeysFrom 列表中所有指定属性的类型,并且将他们值的类型设置为 Type 列出需要哪些 key。

type NavigationPages = 'home' | 'stickers' | 'about' | 'contact';
// 每个数据(上面的key ^)都需要的数据的形状。
interface PageInfo {title: string;url: string;axTitle?: string;
}
const navigationInfo: Record<NavigationPages, PageInfo> = {home: { title: 'Home', url: '/' },about: { title: 'About', url: '/about' },contact: { title: 'Contact', url: '/contact' },stickers: { title: 'Stickers', url: '/stickers/all' }
};
type MyRecord = Record<'a' | 'b', number>;
// type MyRecord = {
//      a: number;
//      b: number;
//  }

5.Pick<Type, Keys>

由 Type 类型选取 Keys 中指定的属性并创建一个新的类型本质上是由某种类型中提取一部分类型信息。

type StickerSortPreview = Pick<Sticker, "name" | "updatedAt">;
// type StickerSortPreview = {
//     name: string;
//     updatedAt: string;
// }

6.Omit<Type, Keys>

由 Type 类型排除 Keys 中指定的属性并创建一个新的类型,本质上是由某种类型中 排除一部分类型信息。

type StickerTimeMetadata = Omit<Sticker, "name">;
// type StickerTimeMetadata = {
//     updatedAt: string;
//     id: number;
//     createdAt: string;
//     submitter: undefined | string;
// }

7.Exclude<Type, RemoveUnion>

创建一个类型,其中 Type 的任何属性都与 RemoveUnion 不重合。

type HomeNavigationPages = Exclude<NavigationPages, "home">;
// type HomeNavigationPages = "stickers" | "about" | "contact"

8.Extract<Type, MatchUnion>

创建一个类型,其中 Type 的任何属性都与 MatchUnion 重合。

type DynamicPages = Extract<NavigationPages, "home" | "stickers">;
// type DynamicPages = "home" | "stickers"

9.NonNullable

从一组类型中将 null 和 undefined 排除后创建一个类型,对有效性检查非常有用。

type StickerLookupResult = Sticker | undefined | null;
type ValidatedResult = NonNullable<StickerLookupResult>;
// type ValidatedResult = Sticker

10.ReturnType

导出一个类型的返回值类型。

declare function getStickerByID(id: number): Promise<ValidatedResult>;
type StickerResponse = ReturnType<typeof getStickerByID>;
// type StickerResponse = Promise<Sticker>

11.InstanceType

创建一个是某个具有构造函数的类或对象的实例的类型。

class StickerCollection {stickers: Sticker[] = [];
}
type CollectionItem = InstanceType<typeof StickerCollection>; 
// type CollectionItem = StickerCollection

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com