TypeScript 之 Type
Type
描述:全称叫做 '类型别名',为类型字面量提供名称。比 Interface 支持更丰富的类型系统特性。
Type 与 Interface 区别
- Interface 只能描述对象的形状,Type 不止
- Interface 能多次声明进行扩展,Type 不行
- 在性能方面,Type 接口检查能够更快
特性
和变量类似,可以在不同的作用域中创建具有相同的名称。
TypeScript 内置了许多全局类型,将帮助你在类型系统完成常用的任务。
对象字面量语法( Object Literal Syntax )
type JsonRsponse = {
version: number;
outOfStock?: boolean; // 可选属性
readonly body: string; // 只读属性
/** In bytes */
payloadSize: number; // 编辑器注释提示
update: (retryTimes: number) => void; // 箭头函数方法
update2(retryTimes: number): void; // 方法
(): JsonRsponse; // 函数
[key: string]: number; // 接受字符串索引,值为number
new (s: string): JSONResponse; // 构造函数
}
这些对象字面量的语法和 Interface 的没有区别,详情可阅读我另一篇 Interface 随笔。https://www.cnblogs.com/lxrNote/p/16953606.html
原始类型( Primitive Type )
type SanitizedIput = string
type MissingNo = 404
元组类型(Tuple Type)
type Data = [
location: Location,
timestamp: string
]
联合类型(Union Type)
type Size = "small" | "medium" | "large"
交叉类型(Intersection Types)
type local = { x: number } & { y: number }
// local {x:number;y:number}
索引类型(Type Indexing)
如果其它类型别名是引用类型,可以通过索引获取其值类型
type Res = { data: { x: string } }
type Content = Res["data"]
// Conent {x:string}
类型来自值(Type from Value)
const data = { x: 123 }
type Content2 = typeof data
// Content2 = { x: number }
类型来自方法返回值(Type from Func Return)
const createFixtures = ()=>{ return 123}
type Fixtures = ReturnType<typeof createFixtures>
// Fixtures = numer
类型来自模块(Type from Module)
const data: import("./data").data
没看懂,知道的朋友指导下。。。。。。
映射类型(Mapped Types)
type Artist = {name: string,bio: string}
type Subscriber<Type> = {
// 循环遍历泛型参数 Type 的每一个字段
[Property in keyof Type]:
(nv: Type[Property]) => void
//设置类型为一个函数,原始类型为参数
}
type ArtisSub = Subscriber<Artist>
// { name: (nv: string)=>void, bio: (nv:string)=>void }
条件类型(Conditional Types)
type HasFourLegs<Animal> = Animal extends { legs: 4 } ? Animal : never
type Bird = { cry: '唧唧喳喳', legs: 2 }
type Dog = { cry: '汪汪汪', legs: 4 }
type Ant = { cry: '...', legs: 6 }
type Wolf = { cry: '嗷呜~', legs: 4 }
type Animal = Bird | Dog | Ant | Wolf
type FourLegs = HasFourLegs<Animal>
// FourLegs = Dog | Wolf
模板联合类型(Template Union Types)
type SupportedLangs = "en" | "pt" | "zh";
type FooterLocaleIDs = "header" | "footer"; type AllLocaleIDs = `${SupportedLangs}_${FooterLocaleIDs}_id`;
// "en_header_id" | "en_footer_id" | "pt_header_id" | "pt_footer_id" | "zh_header_id" | "zh_footer_id"
感谢观看,欢迎互相讨论与指导,以下是参考资料链接
https://www.typescriptlang.org/static/TypeScript%20Types-ae199d69aeecf7d4a2704a528d0fd3f9.png
TypeScript 之 Type的更多相关文章
- TypeScript & as & Type Assertion
TypeScript & as & Type Assertion Type Assertion (as) That is not vanilla JavaScript, it is T ...
- [TypeScript] Work with DOM Elements in TypeScript using Type Assertions
The DOM can be a bit tricky when it comes to typing. You never really know exactly what you're going ...
- [TypeScript] Use the TypeScript "unknown" type to avoid runtime errors
The "any" type can be very useful, especially when adding types to an existing JavaScript ...
- [TypeScript] Increase TypeScript's type safety with noImplicitAny
TypeScript tries to infer as much about your code as it can. But sometimes there really is not enoug ...
- [TypeScript] Create Explicit and Readable Type Declarations with TypeScript mapped Type Modifiers
Using the optional “+” sign together with mapped type modifiers, we can create more explicit and rea ...
- [TypeScript] Represent Non-Primitive Types with TypeScript’s object Type
ypeScript 2.2 introduced the object, a type that represents any non-primitive type. It can be used t ...
- (译文)开始学习Webpack-应用TypeScript,配置热加载和Source Map
项目初始化:采用TypeScript 我们的版本是: $ node --version v8.5.0 $ npm --version 5.5.1 npm版本升级了,因为npm最近带来了新特性,本地会生 ...
- 6、什么是TypeScript、TypeScript的安装、转换为.js文件
1.什么是TypeScript (本人用自己的理解梳理了一下,不代表官方意见) TypeScript:Type+ECMAScript6 TypeScript是一种预处理编程语言,遵循es6标准规范,在 ...
- [TypeScript] Transform Existing Types Using Mapped Types in TypeScript
Mapped types are a powerful and unique feature of TypeScript's type system. They allow you to create ...
- [TypeScript] Restrict null and undefined via Non-Nullable-Types in TypeScript
This lesson introduces the --strictNullChecks compiler option and explains how non-nullable types di ...
随机推荐
- Elasticsearch:Elasticsearch SQL介绍及实例(二)
转载自:https://blog.csdn.net/UbuntuTouch/article/details/105699014
- 使用nginx代理nexus,不是/根路径
location /nexus/ { proxy_pass http://192.168.0.218:8081/; proxy_set_header Host $host:$server_port; ...
- 通过nginx转发rabbitmq访问手动添加队列的时候报错:Management API returned status code 405
原因: 正常访问该地址:https://xxx.xxx.com/rabbitmq/ 时能正常跳转,但是 rabbitmq management 的 API url 出现了 %2f 字符,这些字符会在经 ...
- Kubernetes ConfigMap热更新
ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中. 总结 更新 ConfigMap 后: 使用该 ConfigMap 挂载的 Env 不会同步更新 ...
- Fluent插件管理
官方文档地址:https://docs.fluentd.org/deployment/plugin-management 命令fluent-gem是Fluentd用来安装插件的,它是gem命令的包装器 ...
- C#-01 关于C#中传入参数的一些用法
实验环境 实验所处环境位于vs2019环境中 学习内容 一.最基础的参数传入:值参数 对于这种传入,和其他的c,c++编程语言参数传入一样,没有太大差别,在这里给如下例子: 虽然这里并没有进行传参但是 ...
- 关于aws的ec2实例导出成ova后在vmware中的网络配置不生效的问题
在aws上的ec2实例,尤其是使用了aws市场中的ami创建的linux系统,默认情况下,网络配置都是通过dhcp自动获取的, 这周笔者将一台ec2实例(redhat/linux 8.3)导出/转换成 ...
- C++和Java多维数组声明和初始化时的区别与常见问题
//C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接//初始化时的元素个数自动计算出行数.而仅声明/创建数组而不初始化时,Cpp要求必须写明//行数和列数才能够创建数 ...
- 可观测性的常见用例|Techtarget
[ 文章来源 ]https://www.techtarget.com/searchitoperations/tip/Common-use-cases-for-observability 这些可观测性用 ...
- 华为交换机STP常用命令
STP配置和选路规则 stp enable 在交换机上启用STP stp mode stp dis stp 查看stp配置 dis stp brief 查看接口摘要信息 stp priority 40 ...