企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### **数组** 在ts中,数组的定义方式与js中基本一样,只是需要为数组指定数据类型 ```javascript // 定义一个只能包含字符项的数组 const array: string[] = ['a','b','c'] // 正确 array.push('d') // 报错 Argument of type '1' is not assignable to parameter of type 'string'. array.push(1) ``` 除了使用 `string[]` 这种方式定义数组之外,也可以使用`Array`构造函数的方式去定义数组 ```javascript const array1: Array<number> = [1,2,3,4,5] ``` 看了上面的写法,同学们可能会疑惑,如果数组里面有不同的值,那是不是不能定义呢?这个是可以定义的,不过需要使用到一个新的概念 *联合类型(后面会讲到)*。下面我们定义一个既可以包含字符类型,也可以包含数字类型的数组 ```javascript const array2: Array<string | number> = ['string',12333] const array3: (string | number)[] = ['string', 23222] ``` 数组不仅可以包含基础类型,也可以包含对象 ```javascript type userInfoType = { sex: number, name: string } const user1: userInfoType = { sex: 1212, name: '姓名' } const array4: userInfoType[] = [user1] ``` ### **元组** 前端同学们可能会对元组这个概念比较模糊,元组可以理解成一种特殊的数组,它具有固定的数组的项个数,而且数组的每一项的类型都是明确指定的,不同项的类型可以不同。 ```javascript type tuple= [string,number,boolean] // 数组共三项,每项的类型必须与元组定的对应起来 const val: tuple = ['string', 12345, true] ``` 在对元组进行赋值的时候,不仅元组每项的类型要保持一致,而且元素个数也要保持一致。对元组修改时,可以通过索引进行修改 ```javascript // 正确 索引对应类型是字符串 val[0] = 'string1' // 报错 索引对应类型与值不对应 val[1] = '123456' ``` 针对元组每一项,可以调用项类型对应的方法 ```javascript const val1: [string, number] = ['a,b,c' , 123] // 索引0对应的string类型有split方法 const arr1: string[] = val1.split(',') ``` 元组本质上也是数组,所以数组上的操作元组都可以使用,但需要注意的是,如果对数组进行越界操作,越界操作的类型必须包含在元素定义的类型里面 ```javascript const info: [string, number] = ['子君' , 25] // 正确 ,可以push string | number 类型 info.push('男') // 错误, Argument of type 'true' is not assignable to parameter of type 'string | number'. info.push(true) ``` 如果对元组索引值进行越界操作,在ts2.6之前与之后是不同的,在ts2.6之前,只要通过索引添加的值包含在元组定义的类型里面都是允许的,但在2.6之后是禁止的 ```javascript const info: [string, number] = ['子君' , 25] // ts 2.6之前 正确 info[2] = '男' // ts 2.6之后 报错 // Tuple type '[string, number]' of length '2' has no element at index '2'. // Type '"男"' is not assignable to type 'undefined'. info[2] = '男' ```