MST

星途 面试题库

面试题:TypeScript类型空间与值空间的交互

假设有一个函数,接收一个字符串数组,并且返回数组中字符串长度大于3的元素组成的新数组。请使用TypeScript实现该函数,并详细说明在函数参数、返回值以及函数体内部,类型空间和值空间是如何相互作用的。
32.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function filterStrings(strings: string[]): string[] {
    return strings.filter((str) => str.length > 3);
}

类型空间和值空间的相互作用

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