特点:
//string,TypeScript给我们定义的标识符,提供的字符串类型
//String,JavaScript中的字符串的包装类
let myname: string="乞力马扎罗"
// myname=112,这样就不可以,因为上面已经明确告诉你指定类型了
console.log(myname)
npm install ts-node -g
npm install tslib @types/node -g
let myname: string="乞力马扎罗"
// myname=112,这样就不可以,因为上面已经明确告诉你指定类型了
console.log(myname)
let myname1 ="乞力马扎罗"
//myname1=112//,这样也不可以,因为上面已经推导出string类型了
console.log(myname)
- Ts和Js一样,不区分整数类型(int)和浮点型(double),统一为number类型
- boolean类型只有两个取值,true和false
- sting类型,单引号和双引号都支持,模板字符串也支持
// 注意,在开发中,数组中存放的都是相同的类型
// 1,sting[],数组类型,并且数组中存放的字符串类型,常用写法
// 2,Array,数组类型,这种的只能存放数值,这种的其实是泛型的写法
let num = ['1', '2', '3']
let num1: string[] = ['1', '2', '3']
let num2: Array<number> = []
let num3: Array<string> = []
// 写法一,类型推导写法
let obj = {
name: "乞力马扎罗",
age: 18
}
// 写法2
type objtype = {
name: string
age: number
}
let obj1: objtype = {
name: "乞力马扎罗",
age: 18
}
// 写法3
let obj3: {
name: string
age: number
} = {
name: "乞力马扎罗",
age: 18
}
console.log(obj3.age)
// 写法4,不建议,它是空对象,不能调用obg2.name等
// object对象类型可以用于描述一个对象,不能获取和设置数据
let obj4: object = {
name: "乞力马扎罗",
age: 18
}
// console.log(obj4.age)//报错
// 写法一
let obj = {
name: "乞力马扎罗",
name:"嘿嘿",
age: 18
}
//通过采取symbol定义相同的名称,因为Symbol函数返回不同的值
const s1: symbol = Symbol("title")
const s2: symbol = Symbol("title")
let obj3 = {
s1: Symbol("乞力马扎罗"),
s2: Symbol("乞力马扎罗"),
age: 18
}
let n: null = null
let u: undefined = undefined
function sum(num1:number, num2:number) {
return num1 + num2
}
sum(1,2)
//方式1
function sum(num1: number, num2: number) {
return num1 + num2
}
let sum2: string = sum(1, 2)//报错
console.log(sum2)
//方式2
function sum(num1: number, num2: number):number {
return num1 + num2
}
let sum2 = sum(1, 2)
console.log(sum2)
const arrs =['1','2','3']
//匿名函数,作为参数传递给另一个函数,是否要类型注解?最好不要加!
//forEach接收的是函数,里面的值已经有明确的类型,它是根据上下文推导出来的
//类似此时,item并没有指定类型,但是item是string类型
//这个根据上下文进行推导参数何返回值的类型的过程叫做上下文类型
arrs.forEach(function(item,index,arr){
console.log(item,index,arr)
})
type Pointtype={
x:number
y:number//如果不指定,下面就是any类型
z?:number//可选,下面不传也不会报错
}
function handler(point:Pointtype){
console.log(point.x)
}
handler({x:1,y:2})
let id = "1"
id = "2"
// id = 2//报错
// 故:
// any类型就表示不同标识符的任意类型,并且可以在该标识符上面进行人员的操作
let id1: any = "1"
id1 = "2"
id1 = 2//不报错
let idarrs: any[] = ['1',1,[2]]
let idarrs: unknown="999"
idarrs=2
// console.log(idarrs.length)//报错
// 解决报错,必须先校验,也叫类型缩小
if(typeof idarrs=='string'){
console.log(idarrs.length)//不报错
}
//方式1
type Pointtype = {
x: number
y: number
}
function handler(point: Pointtype): void {
console.log(point.x)
}
handler({ x: 1, y: 2 })
//方式2,自己推导写法
const foo = () => { }
//方式2,用来指定函数的类型
const foo1: () => void = () => { }
//方式3,清晰写法
type footype = () => void
const foo2: footype= () => { }
//方式4,函数调用,指定函数的类型为void,传的时候必传函数
function funs(fn:()=>void){
setTimeout(()=>{
handler({ x: 1, y: 2 })
},100)
}
// funs(123)//不可以传,会报错,因为人家接收函数类型,你传数值
funs(()=>{})//不可以传,会报错,因为人家接收函数类型,你传数值
// 存放多种类型值的方法
// 1,any类型
// 2,使用对象
const info2 = {
name: "1",
age: 2,
height: 19.8
}
//使用元组类型
const info: [string, number, number] = ['1', 2, 2.88]