持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
9、数组类型
// 数组类型
let arr: string[] = ['1']
let arr1: Array<string> = ['1']
let arr2 = [] // any[]
arr2.push(1)
arr2.push('1')
let arr3: (string | number)[] = [1, '2']
type sn = string | number
let arr4: sn[] = [1, '2']
let arr5: Array<sn> = [1, '2']
10、函数类型
// 函数的类型
function abc(a: number = 1 ,b: number = 2): number {
return a + b
}
// 箭头函数
const abc1 = (a: number = 1, b: number = 2): number => {
return a + b
}
// 优化函数的类型(统一定义函数格式)
const abc3: (a:number, b:number) => number = (a, b) => {
return a + b
}
// 再次优化
type fn = (a: number, b: number) => number
const abc2: fn = (a, b) => {
return a + b
}
可选参数和 void
可选和默认值的区别
相同点: 调用函数时,可以少传参数
区别:设置了默认值之后,就是可选的了,不写就会使用默认值; 可选的参数一定有值。
注意:它们不能一起使用。优先使用默认值
// 可选参数 void: 没有任何类型 或者 没有返回值 或者 返回值为 null、undefined
// 注意:可选参数只能出现在参数列表的最后,也就是说可选参数后面不能再出现必选参数
const abc4 = (a?: number, b?: number): void => {
}
void和undefined的区别
如果函数没有指定返回值,调用结束之后,值是undefined的,但是不能直接声明返回值是undefined
function add(a:number, b:number): undefined { // 这里会报错
console.log(a,b)
}
11、对象类型
// 对象
const obj: {
name: string,
age: number,
set: () => void
} = {
name: '1',
age: 12,
set () {
console.log(111);
}
}
// 简化
type Stu1 = { // 类型别名
name?: string, // 可选参数
gender?: string,
results?: number,
height?: number,
learning?: () => void,
game?: () => void
}
const obj1: Stu1 = { // 使用一
name: '1',
gender: '女',
game () {
console.log(111);
}
}
const obj2: Stu1 = { // 使用二
name: '12',
gender: '男',
results: 11,
height: 111,
learning () {
console.log(111);
},
game () {
console.log(2222);
}
}
12、接口类型
// 接口
interface Iobj {
name: string,
gender: string,
game: () => void
}
interface Iobj1 extends Iobj { // 继承
results: number,
height: number,
learning: () => void,
}
const stuObj1: Iobj1 = {
name: '12',
gender: '男',
results: 11,
height: 111,
learning () {
console.log(111);
},
game () {
console.log(2222);
}
}
13、元组类型
简化版 useState
// 元组
const useState = (num: number): [number, (newNum: number) => void] => {
const fn = (newNum: number) => {
num = newNum
}
return [num, fn]
}
14、字面量类型
// 字面量
type aa = 'aa' | 'bb'
let aa: aa = 'aa'
let bb: aa = 'bb'
简化版 reducer
// reducer
type todo = 'GETLIST' | 'GETTODO'
type actionObj = {
type: todo,
payload: string[]
}
function reducer(state: string[] = [], action: actionObj): string[] {
switch (action.type) {
case 'GETLIST':
return action.payload
case 'GETTODO':
return action.payload
default:
return state
}
}
typescript的优缺点
优点:
它提供了可选静态类型的优点。在这里,Typescript提供了可以添加到变量、函数、属性等的类型。
Typescript能够编译出一个能在所有浏览器上运行的JavaScript版本。
它使用基于类的面向对象编程。
TypeScript总是在编译时强调错误,而JavaScript在运行时指出错误。
缺点
如果我们在浏览器中运行TypeScript应用程序,需要一个编译步骤将TypeScript转换成JavaScript。
要使用任何第三方库,必须使用定义文件。并不是所有第三方库都有可用的定义文件。
TypeScript不支持抽象类。
总结
TypeScript感觉将前端的JavaScript向后端的JAVA、C++等靠近了一大步,开始还有点不适应,一下子不知道怎么开始写程序,不过习惯了感觉其实这样挺好的,代码更严谨了,而且接口、装饰器这些其实真的挺好用的