ts定义数组类型_TS的对象类型、数组类型、函数类型
对象类型
基础使用
在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型。
简单例子:
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom',
age: 25
};
复制代码
上面的例子中,我们定义了一个接口 Person,接着定义了一个变量 tom,它的类型是 Person。这样,我们就约束了 tom 的形状必须和接口 Person 一致。
定义的变量比接口少/多了属性是不允许的:
interface Person {
name: string;
age: number;
}
let tom: Person = {
name: 'Tom'
};
let tom: Person = {
name: 'Tom',
age: 25,
gender: 'male'
};
//都会报错哦
复制代码可选属性
但是有些时候,我们并不希望对象的形状完全遵守接口的定义(我们希望少/多些属性):
所以我们会用到可选属性
interface Person {
name: string;
age?: number;
}
let tom: Person = {
name: 'Tom'
};
// 特征是打了个问号,意味着并不是必须的,而是可选的属性
//但是这个时候可以少属性,却不能多属性
复制代码任意属性
我们会使用任意属性来实现可以少属性/多属性
interface Person {
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
name: 'Tom',
gender: 'male'
};
复制代码
需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
interface Person {
name: string;
age?: number;
[propName: string]: string; // 任意属性只包含了string类型
}
let tom: Person = {
name: 'Tom',
age: 25, // age的nubmer属性不在任意属性string内,会报错
gender: 'male'
};
复制代码只读属性
有时候我们希望对象中的一些字段只能在创建的时候被赋值,那么可以用 readonly 定义只读属性:
interface Person {
readonly id: number;
name: string;
age?: number;
[propName: string]: any;
}
let tom: Person = {
id: 89757,
name: 'Tom',
gender: 'male'
};
tom.id = 9527;// 该属性只读,赋值操作会报错
复制代码数组类型
数组类型会对其的内容进行约束
「类型 + 方括号」表示法
let fibonacci: number[] = [1, 1, 2, 3, 5];
复制代码数组泛型
let fibonacci: Array = [1, 1, 2, 3, 5];
复制代码用接口(interface)表示数组
interface NumberArray {
[index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
复制代码类数组不能使用以上3钟形式去表示
function sum() {
let args: {
[index: number]: number;
length: number;
callee: Function;
} = arguments;
}
复制代码函数类型
函数声明
函数表达式
在 JavaScript 中,有两种常见的定义函数的方式如上。
一个函数有输入和输出,所以基本上就是把约束覆盖到函数的输入与输出上。
1. 传统的定义函数的输入与输出
// 函数声明的写法
function sum(x: number, y: number): number {
return x + y;
}
// 多参数 | 少参数 是不被允许的哦
// 函数表达式的写法,等式左边的可以被省略而完全又右边类型判断出来。
let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y;
};
复制代码
2. 用接口定义函数的输入与输出
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc = function(source: string, subString: string) {
return source.search(subString) !== -1;
}
复制代码
- 函数的参数详情
前面我们提到,输入多/少的参数式不被允许的,这在接口定义中也存在着这个限制,同样的,我们也可以使用?来定义可选参数
!!!可选参数必须接在必需参数后面,否则会报错。如下是正确写法
function buildName(firstName: string, lastName?: string) {
if (lastName) {
return firstName + ' ' + lastName;
} else {
return firstName;
}
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName('Tom');
复制代码
参数也可以拥有默认值, TypeScript 会将添加了默认值的参数识别为可选参数,此时就不受「可选参数必须接在必需参数后面」的限制了:
function buildName(firstName: string, lastName: string = 'Cat') {
return firstName + ' ' + lastName;
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName('Tom');
复制代码
- 函数的重载
这个挺……无语的,感觉很没必要
function reverse(x: number | string): number | string {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''));
} else if (typeof x === 'string') {
return x.split('').reverse().join('');
}
}
复制代码本教程完全依赖于 : https://ts.xcatliu.com/introduction/index.html
复制代码
ts定义数组类型_TS的对象类型、数组类型、函数类型相关推荐
- php7 对象转数组,php7中为对象/关联数组进行解构赋值
在CoffeeScript,Clojure,ES6和许多其他语言中,我们对对象/贴图/等进行了解构,如下所示: obj = {keyA: 'Hello from A', keyB: 'Hello fr ...
- php对象如何转化为数组,php如何将对象转换为数组
php将对象转换为数组的方法是:可以先通过is_object()函数进行判断,然后进行强制类型转换.is_object()函数用于检测变量是否是一个对象.具体转换方法:[$arr = (array)( ...
- js声明数组 js数组如何获取真实对象 js数组处理null值情况 js数组通过下标赋值和push赋值的区别 loopback4的基础使用
目录 问题来源 js数组 数组通过下标赋值 数组通过push赋值 总结 loopback4 安装 创建项目 项目启动 访问项目 创建HelloController 运行访问HelloControlle ...
- android listview 数据数组制作,android – 从对象的数组列表中填充listview
在你的活动 AdapterPerson adbPerson; ArrayList myListItems = new ArrayList(); //then populate myListItems ...
- 使用typedef语句定义函数类型和函数指针
首先我们要先明白一个概念,函数名是不是指针?也就是说一个函数名可不可以代表一个地址?以及什么是函数类型? 经过查找,函数名就是一个指针,但是意义是不一样的,如同于数组a[],a和&a其实都是一 ...
- 【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )
文章目录 一.尾随 Lambda - Trailing Lambda 语法 二.Kotlin 中使用 Lambda 表达式替代对象表达式原理 1.Lambda 替换对象表达式 2.原理分析 3.示例分 ...
- 返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...
简介 在 GO 语言中还有另外一种定义使用函数的方式,就是函数类型,所谓的函数类型就是将函数作为一种类型可以用来定义变量,这种用法类似于前面我们讲过的 int ,float64,string 等类型, ...
- typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void)函数类型和函数指针的区别
转载请注明原地址:http://blog.csdn.net/oyhb_1992/article/details/76975284 typedef int(init_fnc_t) (void)和 typ ...
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...
最新文章
- 清华大学提出点云Transformer!在3D点云分类、分割上表现优秀,核心代码已开源!...
- 红帽RHCE培训-课程3笔记目录
- oracle sql developer 出现 : 适配器无法建立连接问题解决方案 The Network Adapter could not establish the connection...
- c mysql 中文字符_在C#和MySQL中存取中文字符时避免乱码的方法
- HDU - 4569 Special equations(同余模定理)
- LINQ to SQL 实现 GROUP BY、聚合、ORDER BY
- Linux NULL定义
- 字符串循环右移的一道题目
- 图像学习-HOG特征
- 帮你排雷Jmeter分布式性能测试那些坑~轻轻松松去实战
- “21天好习惯”第一期-20
- Pytorch 1.1.0驾到!小升级大变动,易用性更强,支持自定义RNN
- Zabbix安装记录
- 微信小程序的剪贴板 +复制剪贴,在淘宝中打开就可以获取到商品
- 前端 实现 直角三角形 边长、角度计算工具
- 【Python】QQ大家来找茬辅助
- Linux cat命令
- 寒假自学数学建模(2)相关系数
- 提高转化率的 3 个客户引导最佳实践
- IOS开发 当滑动tabelview时,使键盘滑落
热门文章
- vue2.0的Element UI的表格table列时间戳格式化
- 计算机网络实验之局域网应用,计算机网络实验之局域网的配置
- 数据结构_C语言_实验一_线性结构 ——一元多项式求导
- dalvik on J2EE: running tomcat on dalvik
- CSDN 技术影响力之星正式揭晓 | 2022 开发者生态汇
- 树大招风:英伟达证实遭遇攻击,核心源代码惨遭泄露,75GB机密数据被公开
- 72000 Star 下载工具被 GitHub 下架,背后的数字千年版权法案是什么?
- 盘一盘 Spring 核心技术之依赖注入 | 原力计划
- 阿里员工自愿加班却遭同事骂!网友们炸锅了
- 吴军:站在浪潮之巅,5G 和 IoT 才是未来 10 年的浪潮 | 人物志