// 定义一个函数,接受一个包含string或number类型元素的数组
function separateAndSum(arr: (string | number)[]): [string[], number] {
// 初始化一个空数组,用于存储string类型的元素
let stringArray: string[] = [];
// 初始化一个变量,用于存储number类型元素的总和,初始值为0
let numberSum: number = 0;
// 遍历传入的数组
for (let i = 0; i < arr.length; i++) {
// 使用typeof操作符检查当前元素的类型
if (typeof arr[i] ==='string') {
// 如果是string类型,将其添加到stringArray中
stringArray.push(arr[i]);
} else if (typeof arr[i] === 'number') {
// 如果是number类型,将其加到numberSum中
numberSum += arr[i];
}
}
// 返回一个元组,第一个元素是stringArray,第二个元素是numberSum
return [stringArray, numberSum];
}
类型推断解释
- 函数参数类型推断:函数定义时,参数
arr
的类型声明为(string | number)[]
,这表明该函数接受一个数组,数组中的元素类型可以是string
或者number
。TypeScript在编译时会检查传入的数组元素类型是否符合此定义。
- 变量类型推断:
stringArray
变量初始化为[]
,由于后面使用push
方法添加string
类型元素,TypeScript能够推断出stringArray
的类型为string[]
。
numberSum
变量初始化为0
,TypeScript推断其类型为number
,因为0
是number
类型,且后续操作都是对数字的加法运算。
- 返回值类型推断:函数返回一个数组
[stringArray, numberSum]
,TypeScript根据stringArray
的类型string[]
和numberSum
的类型number
,推断出函数的返回值类型为[string[], number]
,这是一个包含string
数组和number
类型的元组。