function filterStrings(strings: string[]): string[] {
return strings.filter((str) => str.length > 3);
}
类型空间和值空间的相互作用
- 函数参数:
- 类型空间:参数
strings
被定义为 string[]
类型,这意味着在类型层面,它表示一个字符串数组。这个类型定义限制了传入函数的值必须是字符串数组。
- 值空间:实际传入函数的是具体的字符串数组,例如
['apple', 'ban', 'cherry']
,这些值必须满足 string[]
类型的要求。类型空间规定了值空间的取值范围,只有符合 string[]
类型的值才能作为参数传入。
- 返回值:
- 类型空间:返回值类型定义为
string[]
,表明函数返回的结果是一个字符串数组。这是在类型层面的规定。
- 值空间:函数内部通过
filter
方法筛选出字符串长度大于3的元素组成新数组,这个新数组中的值都是具体的字符串,例如 ['apple', 'cherry']
,这些值构成了返回值的值空间,并且它们必须满足 string[]
类型的要求,即每个元素都是字符串。
- 函数体内部:
- 类型空间:在
filter
回调函数中,参数 str
的类型被推断为 string
,这是基于外部 strings
数组的类型 string[]
推导出来的。这种类型推断保证了在回调函数内部对 str
进行操作(如访问 length
属性)时,操作是类型安全的。
- 值空间:
filter
方法遍历 strings
数组中的每个具体值(如 'apple'
,'ban'
等),对每个值进行 length > 3
的判断,符合条件的值被保留下来组成新数组。类型空间为值空间的操作提供了安全保障,例如如果误将非字符串类型的值放入 strings
数组,TypeScript 编译器会报错,因为非字符串类型没有 length
属性,这体现了类型空间对值空间操作的约束。