本文介绍: 在typescript中,我们定义对象方式要用关键字interface接口),我的理解使用interface定义一种约束,让数据结构满足约束格式。与 void区别是,undefinednull 是所有类型的子类型。从上面我们可以发现的是,和原生js 相比,数组每个元素类型都在声明时候已经绑定好了,所以如果其中插入一些非数字类型数据编辑器将会报错void 类型用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数

Boolean

注意,使用构造函数 Boolean 创造的对象不是布尔值

let createdBoolean: boolean = new Boolean(1)
//这样会报错 应为事实上 new Boolean() 返回的是一个 Boolean 对象 
 

事实上 new Boolean() 返回的是一个 Boolean 对象 需要改成

let createdBoolean: Boolean = new Boolean(1)
let booleand: boolean = true //可以直接使用布尔值
 
let booleand2: boolean = Boolean(1) //也可以通过函数返回布尔值

Number

支持十六进制十进制八进制二进制

let notANumber: number = NaN;//Nan
let num: number = 123;//普通数字
let infinityNumber: number = Infinity;//无穷
let decimal: number = 6;//十进制
let hex: number = 0xf00d;//十六进制
let binary: number = 0b1010;//二进制
let octal: number = 0o744;//八进制s

String

字符串使用string定义的

let a: string = '123'
//普通声明
 
//也可以使用es6的字符模板
let str: string = `dddd${a}`

其中 ` 用来定义 ES6 中的模板字符串,${expr} 用来模板字符串中嵌入表达式

undefinednull

let u: undefined = undefined;//定义undefined
let n: null = null;//定义null

voidundefinednull 最大区别
void区别是,undefinednull 是所有类型的子类型。也就是undefined 类型的变量可以赋值给 string 类型的变量

//这样写会报错 void类型不可以分给其他类型
let test: void = undefined
let num2: string = "1"
 
num2 = test
//这样是没问题
let test: null = null
let num2: string = "1"
 
num2 = test
 
//或者这样的
let test: undefined = undefined
let num2: string = "1"
 
num2 = test

null 不能 赋予 void 类型

void

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数

function voidFn(): void {
    console.log('test void')
}

void 类型的用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数

void也可以定义undefined 和 null类型

let u: void = undefined
let n: void = null;

Array

//类型加中括号
let arr:number[] = [123]
//这样会报错定义了数字类型出现字符串是不允许的
let arr:number[] = [1,2,3,'1']
//操作方法添加也是不允许的
let arr:number[] = [1,2,3,]
arr.unshift('1')
 
 
var arr: number[] = [1, 2, 3]; //数字类型的数组
var arr2: string[] = ["1", "2"]; //字符串类型的数组
var arr3: any[] = [1, "2", true]; //任意类型的数组

数组泛型
规则 Array<类型>

let arr2: Array<number> = [1, 2, 3]
等同于
let arr1: number[] = [1, 2, 3]

从上面我们可以发现的是,和原生js 相比,数组每个元素的类型都在声明时候已经绑定好了,所以如果其中插入一些非数字类型的数据编辑器将会报错

那如果要使得在数组中可以插入其他类型的数据呢,则可以采用联合类型的方式比如

let arr: Array<number | string> = [1, 'abc']
let list: Array<any> = ['test', 1, [],{a:1}]

这样,数组就能包含多种数据类型

元组

元组是一种特殊的数组,它控制了数组成员的类型和数量,比如

let tuple: [number, string] = [1, 'abc']

上面代码控制了三个条件
数组中只能有两个元素
数组第一个元素是数字类型;
数组第二个元素是字符串类型;

Function

函数的声明需要给参数添加类型注解如下

let add = (a: number, b: number) => a + b
或者
let add = (a: number, b: number): number => a + b // 最后这个number是对函数返回值类型的注解,不过平时可以省略(TS的类型推断

函数的声明还有一种形式:(先声明实现)

let add:  (a: number, b: number) => number
add = (n, m) => n + m

Object

按照 JS 的用法,或许我们觉得可以如下方式声明与操作对象:

let obj: object = { x: 1, y: 2 }
obj['x'] = 2 // 报错ts中不知道声明的对象中有x属性

Ts 中应该这样做:

let obj: {x: number, y: number} = {x: 1, y: 2}
obj.x = 2

interface

typescript中,我们定义对象的方式要用关键interface接口),我的理解使用interface来定义一种约束,让数据结构满足约束格式。定义方式如下

//这样写是会报错的 因为我们在person定义了a,b但是对象里面缺少b属性
//使用接口约束时候不能多一个属性也不能少一个属性
//必须与接口保持一致
interface Person {
    b:string,
    a:string
}
 
const person:Person  = {
    a:"213"
}

//重名interface  可以合并
interface A{name:string}
interface A{age:number}
var x:A={name:'xx',age:20}
//继承
interface A{
    name:string
}
 
interface B extends A{
    age:number
}
 
let obj:B = {
    age:18,
    name:"string"
}

可选属性 使用?操作符

//可选属性的含义是该属性可以不存在
//所以说这样写也是没问题的
interface Person {
    b?:string,
    a:string
}
 
const person:Person  = {
    a:"213"
}

Any 类型 和 unknown 顶级类型

1.没有强制限定哪种类型,随时切换类型都可以 我们可以对 any 进行任何操作,不需要检查类型

let anys:any = 123
anys = '123'
anys = true

2.声明变量的时候没有指定任意类型默认为any

let anys;
anys = '888'
anys = true

3.弊端如果使用any 就失去了TS类型检测作用

4.TypeScript 3.0中引入unknown 类型也被认为是 top type ,但它更安全。与 any 一样,所有类型都可以分配unknown

unknow unknow类型比any更加严格当你要使用any 的时候可以尝试使用unknow

//unknown 可以定义任何类型的值
let value: unknown;
 
value = true;             // OK
value = 42;               // OK
value = "Hello World";    // OK
value = [];               // OK
value = {};               // OK
value = null;             // OK
value = undefined;        // OK
value = Symbol("type");   // OK
 
//这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类和子类型
//unknown类型不能赋值给其他类型
let names:unknown = '123'
let names2:string = names
 
//这样就没问题 any类型是可以的
let names:any = '123'
let names2:string = names   
 
//unknown可赋值对象只有unknown 和 any
let bbb:unknown = '123'
let aaa:any= '456'
 
aaa = bbb

区别2

如果是any类型在对象没有这个属性的时候还在获取是不会报错的
let obj:any = {b:1}
obj.a
 
 
如果是unknow 是不能调用属性和方法
let obj:unknown = {b:1,ccc:():number=>213}
obj.b
obj.ccc()

枚举

其他高级类型玩法

Symbol

原文地址:https://blog.csdn.net/weixin_60196946/article/details/134786089

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45152.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注