前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Typescript-基础类型

Typescript-基础类型

作者头像
用户3258338
发布2019-07-19 17:15:18
6270
发布2019-07-19 17:15:18
举报
文章被收录于专栏:女程序员的日常_Lin

探索未知~

基础类型

Typescript支持与Javascript几乎相同的数据类型,此外还提供使用的枚举类型方便我们使用。

布尔值

最简单的数据类型就是true/false,在Javascript和Typescript里叫做boolean。

代码语言:javascript
复制
let isDone: boolean = false;

数字

最简单的数据类型就是true/false,在Javascript和Typescript里叫做boolean。和Javascript一样,typescript里的所有数字都是浮点数。这些浮点数的类型是number。除了支持十进制和十六进制字面量,Typescript还支持ECMAScript2015中引入的二进制和八进制字面量。

代码语言:javascript
复制
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;

字符串

Javascript程序的另一项基本操作是处理网页或服务端的文本数据。像其他语言一样,我们使用string表示文本数据类型。和Javascript一样,可以使用双引号(")或单引号(')表示字符串

代码语言:javascript
复制
let name:string = "bob"

还可以使用“模板字符串”,他可以定义多行文本和内嵌表达式。这种字符串被反引号( `)并且以${expr}这种形式嵌入表达式

代码语言:javascript
复制
let name: string = `Gene`
let age: number=37;
let sentence: string= `Hello,my name is ${name}.

I'll be ${age+1} years old next month.`

与下面定义sentence的方式效果相同:

代码语言:javascript
复制
let sentence: string = "Hello,my name is"+ name + '.\n\n' +
"I'll be "+(age+1)+" years old next month.";

数组

Typescript像Javascript一样可以操作数组元素。有两种方式可以定义数组,第一种,可以在数组类型后边接上[],表示由此类型元素组成的一个数组:

代码语言:javascript
复制
let list: number[]=[1,2,3];

第二种方式是使用数组泛型,Array<元素类型>:

代码语言:javascript
复制
let list: Array<number> = [1,2,3];

元组Tuple

元祖类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。

代码语言:javascript
复制
let x:[string, number];
x=['hello',10];
x=[10,'hello']; // error

当访问一个已知索引的元素,会得到正确的类型:

代码语言:javascript
复制
console.log(x[0].substr(1));
<!--console.log(x[1].substr(1)); // Error,'number' does not have 'substr'

当访问一个越界的元素,会使用联合类型替代:

代码语言:javascript
复制
x[3] = world; // OK,字符串可以赋值给(string|number)类型
console.log(x[5].toString());  // OK,'string'和''number'都有toString
x[6] = true; // Error, 布尔不是(string | number )类型

联合类型是高级主题,后续还会讨论

枚举

enum类型是对Javascript类型的补充,像C#等其他语言一样,使用枚举类型可以为一组数值赋予友好的名字。

代码语言:javascript
复制
enum Color {Red, Green, Blue}
let c: Color = Color.Green

默认情况下,从0开始为元素编号。也可以手动的指定成员的数值。如下:

代码语言:javascript
复制
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green

或者全部采用手动赋值

代码语言:javascript
复制
enum Color {Red=1, Green=2, Blue=4}
let c: Color = Color.Green;

枚举类型提供的一个便利是可以由枚举的值得到他的名字:

代码语言:javascript
复制
enum Color {Red=1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // Green

Any

有时候我们不清楚数据的类型,比如来自用户输入或来第三方代码库。这时候我们可以使用any

代码语言:javascript
复制
let notSure: any =4;
notSure = 'maybe a string instead';
notSure = false;

同时any类型还允许在它上面调用任何方法,相比Object更灵活:

代码语言:javascript
复制
let notSure: any =1;
notSure.ifItExists();
notSure.tofixed();

let prettySure: Object =4;
prettySure.toFixed(); //Error: Property 'tiFixed' doesn't exist on type 'Object'

当你只知道一部分数据的类型时,any也是有用的,比如一个数组,它包含了不同的类型的数据:

代码语言:javascript
复制
let list: any[] = [1, true, 'free'];
list[1] = 100;

Void

某种程度上说,void类型像是与any类型相反,它表示没有任何类型。当一个函数没有返回值时,你通常会见到返回值类型是void:

代码语言:javascript
复制
function warnUser():void{
    console.log("Thisis my warning message");
}

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefind和null:

代码语言:javascript
复制
let unusable :void = undefined;

Null和undedefined

Typescript里,undefined和null两者个自有自己的类型分别叫做undefined和null。和void类似,他们本身的类型用处不是很大:

代码语言:javascript
复制
let u: undefined = undefined;
let n: null = null;

使用联合类型 string | null | undefined ,可以做很好的类型校验。

Never

never类型表示的是那些永不存在的值的类型。例如,never类型是那些总是会抛出错误或者根本就不会有返回值的函数表达式或箭头表达式的返回值类型。变量也可能是never类型,当他们被永不为真的类型保护所约束时。never 是任何类型的子类型,也可以赋值给任何类型。然而,没有类型可以赋值给never类型,即使any也不能赋值给never。

代码语言:javascript
复制
<!--返回never的函数必须存在无法达到的终点-->
function error(message: string): never{
    throw new Error(message)
}

function infiniteLoo(): never{
    while(true){
        
    }
}

Object

object是非原始类型。

代码语言:javascript
复制
declare function create(o:object | null):void

create({prop:0}); // ok
create(42); // Error

类型断言

类型断言好比其他语言的类型转换,但是不进行特殊的数据检查和解构。他没有运行时的影响,只在编译阶段起作用。 类型断言有两种语法,一种是尖括号语法:

代码语言:javascript
复制
let somenValue :any = "this is atring ";
let stringLength : number = (<string>someValue).length;

另一种是as语法:

代码语言:javascript
复制
let someValue : any = "this is string";
let sringLength :number = (someValue as string).length;

两种语法是等价的,但是在Typescript里面使用JSX时,只有as语法断言是允许的。

愿我们有能力不向生活缴械投降---Lin

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 女程序员的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础类型
    • 布尔值
      • 数字
        • 字符串
          • 数组
            • 元组Tuple
              • 枚举
                • Any
                  • Void
                    • Null和undedefined
                      • Never
                        • Object
                        • 类型断言
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档