对象类型

基础使用

在 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的对象类型、数组类型、函数类型相关推荐

  1. php7 对象转数组,php7中为对象/关联数组进行解构赋值

    在CoffeeScript,Clojure,ES6和许多其他语言中,我们对对象/贴图/等进行了解构,如下所示: obj = {keyA: 'Hello from A', keyB: 'Hello fr ...

  2. php对象如何转化为数组,php如何将对象转换为数组

    php将对象转换为数组的方法是:可以先通过is_object()函数进行判断,然后进行强制类型转换.is_object()函数用于检测变量是否是一个对象.具体转换方法:[$arr = (array)( ...

  3. js声明数组 js数组如何获取真实对象 js数组处理null值情况 js数组通过下标赋值和push赋值的区别 loopback4的基础使用

    目录 问题来源 js数组 数组通过下标赋值 数组通过push赋值 总结 loopback4 安装 创建项目 项目启动 访问项目 创建HelloController 运行访问HelloControlle ...

  4. android listview 数据数组制作,android – 从对象的数组列表中填充listview

    在你的活动 AdapterPerson adbPerson; ArrayList myListItems = new ArrayList(); //then populate myListItems ...

  5. 使用typedef语句定义函数类型和函数指针

    首先我们要先明白一个概念,函数名是不是指针?也就是说一个函数名可不可以代表一个地址?以及什么是函数类型? 经过查找,函数名就是一个指针,但是意义是不一样的,如同于数组a[],a和&a其实都是一 ...

  6. 【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )

    文章目录 一.尾随 Lambda - Trailing Lambda 语法 二.Kotlin 中使用 Lambda 表达式替代对象表达式原理 1.Lambda 替换对象表达式 2.原理分析 3.示例分 ...

  7. 返回值类型与函数类型不匹配_golang基础语法,定义函数类型 为已存在的数据类型起别名...

    简介 在 GO 语言中还有另外一种定义使用函数的方式,就是函数类型,所谓的函数类型就是将函数作为一种类型可以用来定义变量,这种用法类似于前面我们讲过的 int ,float64,string 等类型, ...

  8. 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 ...

  9. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

最新文章

  1. 清华大学提出点云Transformer!在3D点云分类、分割上表现优秀,核心代码已开源!...
  2. 红帽RHCE培训-课程3笔记目录
  3. oracle sql developer 出现 : 适配器无法建立连接问题解决方案 The Network Adapter could not establish the connection...
  4. c mysql 中文字符_在C#和MySQL中存取中文字符时避免乱码的方法
  5. HDU - 4569 Special equations(同余模定理)
  6. LINQ to SQL 实现 GROUP BY、聚合、ORDER BY
  7. Linux NULL定义
  8. 字符串循环右移的一道题目
  9. 图像学习-HOG特征
  10. 帮你排雷Jmeter分布式性能测试那些坑~轻轻松松去实战
  11. “21天好习惯”第一期-20
  12. Pytorch 1.1.0驾到!小升级大变动,易用性更强,支持自定义RNN
  13. Zabbix安装记录
  14. 微信小程序的剪贴板 +复制剪贴,在淘宝中打开就可以获取到商品
  15. 前端 实现 直角三角形 边长、角度计算工具
  16. 【Python】QQ大家来找茬辅助
  17. Linux cat命令
  18. 寒假自学数学建模(2)相关系数
  19. 提高转化率的 3 个客户引导最佳实践
  20. IOS开发 当滑动tabelview时,使键盘滑落

热门文章

  1. vue2.0的Element UI的表格table列时间戳格式化
  2. 计算机网络实验之局域网应用,计算机网络实验之局域网的配置
  3. 数据结构_C语言_实验一_线性结构 ——一元多项式求导
  4. dalvik on J2EE: running tomcat on dalvik
  5. CSDN 技术影响力之星正式揭晓 | 2022 开发者生态汇
  6. 树大招风:英伟达证实遭遇攻击,核心源代码惨遭泄露,75GB机密数据被公开
  7. 72000 Star 下载工具被 GitHub 下架,背后的数字千年版权法案是什么?
  8. 盘一盘 Spring 核心技术之依赖注入 | 原力计划
  9. 阿里员工自愿加班却遭同事骂!网友们炸锅了
  10. 吴军:站在浪潮之巅,5G 和 IoT 才是未来 10 年的浪潮 | 人物志