网站首页 > 技术文章 正文
一、基本数据类型
布尔值,布尔值是最基础的数据类型,在TypeScript 中,使用boolean 定义布尔值类型:
let isDone: boolean = false;
数值,使用number,定义数值类型:
num: number = 1;
字符串,使用string 定义字符串类型:
let myName: string = '胖小伙与胖奶奶' ;
//ES6模板字符串
let sentence: string =` Hello, my name is ${myName}`;
空值,JavaScript没有空值(Void) 的概念,在TypeScript中,可以用void 表示没有任何返回值的函数:
function alertName(): void{
alert('My name is 胖小伙与胖奶奶');
}
声明一个void 类型的变量没有什么用,因为你只能将它赋值为undefined 和null
二、任意值(Any)
任意值(Any) 用来表示允许赋值为任意类型。如果是一个普通类型, 在赋值过程中改变类型是不被允许的:
let favoriteNumber: string = 'seven';
favoriteNumber = 7;
// 返回: error: Type' number' is not assignable to type" string'
//注意:但如果是any 类型,则允许被赋值为任意类型。例如
let favoriteNumber: any = {
num: 'seven'
};
myFavoriteNumber.num = 7
在任意值上访问任何属性都是允许的:
let anyThing: any = {
myName: {
firstName:'胖小伙与胖奶奶'
}
};
console.log( anyThing.myName);
console.log( anyThing.myName.firstName);
也允许调用任何方法:
let anyThing: any = {
myName: {
firstName:'胖小伙与胖奶奶'
},
sayHello: function(){
consle.log('你好,胖小伙与胖奶奶')
}
};
anyThing.setName( 'Jerry');
anyThing.sayHello();
所以,声名这个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值。
三、类型推论
如果没有明确的指定类型,那么TypeScript会依照类型推论(Type Inference)的规则推断出一个类型。以下代码虽然没有指定类型,但是会在编译的时候报错:
let favoriteNumber ='seven' ;
myFavoriteNumber = 7
//error: Type ' number' is not assignable to type ' string'
事实上,它等价于:
let favoriteNumber: string ='seven' ;
favoriteNumber = 7;
//error: Type ' number' is not assignable to type' string'.
TypeScript会在没有明确的指定类型的时候推测出一个类型, 这就是类型推论。
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成any 类型而完全不被类型检查:
let favoriteNumber;
favoriteNumber = 'seven' ;
favoriteNumber = 7;
四、联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。举个栗子
let favoriteNumber: string| number;
favoriteNumber =‘seven ' ;
favoriteNumber = 7
联合类型使用| 分隔每个类型。这里的let myFavoriteNumber: string | number 的含义是,允许myFavoriteNumber 的类型是string 或者number ,但是不能是其他类型。比如下面这个栗子就会报错:
let myFavoriteNumber: string| number;
myFavoriteNumber = true;
//error: Type‘ boolean' is not assignable to type' string| number' . 1/ Type 'boolean' is not assignable to type ' number'
访问联合类型的属性或方法
当TypeScript不确定一个联合类型的变 星到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法:
function getLength( something: string| number): number {
return something.length;
}
// error: Property ' length' does not exist on type ' string | number'.
// Property 'length' does not exist on type ' number' .
上例中, length 不是string 和number 的共有属性,所以会报错 。访问string 和number 的共有属性是没问题的:
function getString(something: string| number): string {
return something. toString();
}
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:
let myF avoriteNumber: string| number;
myF avoriteNumber =‘seven ' ;
console. log(myF avoriteNumber .length); // 5
myFavoriteNumber = 7;
console . log( myF avoriteNumber . length); //编译时报错
// error: Property ' length' does not exist on type ' number' .
上例中,第二行的myFavoriteNumber 被推断成了string ,访问它的length 属性不会报错。 而第四行的myFavoriteNumber 被推断成了number ,访问它的length 属性时就报错了。
五、接口
在TypeScript中,我们使用Interfaces来定义一 个接类型的对象。
什么是接口
在面向对象语言中,接口(Interfaces) 是一个 很重要的概念,它是对行为的抽象,而具体如何行动需要由类去实现。
TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称作” 鸭式辨型法或结构性类型化”。在TypeScript里,接门的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
举个例子
interface Person{
name: string;
age: number ;
}
let myMsg: Person = {
name:' 胖小伙与胖奶奶' ,
age: 25
};
//上面的例子中,我们定义了一个接口Person,接着定义了一个变量tom,它的类型是Person。
//这样,我们就约束了tom的形状必须和接口Person一致。接口定义的变量比接口少了些属性是不允许的
//如果接口定义存在可选值,那么使用 ‘?’,例如
interface Person {
name: string;
age?: number;
}
let myMsg: Person = {
name:' 胖小伙与胖奶奶'
}
//这种编译不会报错
六、数组
存放多个元素的集合,最简单的方法是使用「类型+方括号」来表示数组:
let num1: number[] = [1, 1, 2, 3, 5];//数组的项中不允许出现其他的类型:
let num2: number[] = [1, '1', 2, 3, 5];// Type ' string' is not assignable to type ' number'
数组的一些方法的参数也会根据数组在定义时约定的类型进行限制:
let arr: number[] = [1, 1, 2, 3, 5];
arr.push('8');// Argument of type '"8"' is not assignable to parameter of type ' number' .
上例中,push 方法只允许传入number 类型的参数,但是却传了一个"g" 类型的参数,所以报错了。这里"g" 是一个字符串字面量类型。
也可以指定个any类型的数组:
let list: any[] = [
"name":"胖小伙与胖奶奶",
"age", 25,
{
website:' http://xxxx.com'
},
gender:{
"wife":"胖小伙",
"age":26,
}
];
猜你喜欢
- 2024-12-31 发那科机器人2DV码垛功能
- 2024-12-31 如何使用python进行正确的四舍五入?这个坑有点大
- 2024-12-31 有没有通俗易懂的动态代理示例可供参考学习?
- 2024-12-31 运算符,i.MXRT,管理工具,嵌入式,XECC技术文章分享
- 2024-12-31 第十九天:EXCEL万能字符串转换函数TEXT那些普拉斯的神操作
- 2024-12-31 自动控制原理-滞后校正设计方法以及编程实现
- 2024-12-31 C语言 | 由小到大输出两个数
- 2024-12-31 C++笔记:函数
- 2024-12-31 十万个怎么办-不清楚机器人TEST指令怎么办?
- 2024-12-31 一个 print 函数,挺会玩啊?
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)