MST

星途 面试题库

面试题:TypeScript复杂对象声明的类型推断高级题

假设有如下TypeScript代码: ```typescript interface User { name: string; age: number; } function createUser(name: string, age: number): User { return { name, age }; } let newUser = createUser('Alice', 30); ``` 1. 分析`newUser`的类型推断过程。 2. 如果`createUser`函数的返回值类型定义被省略,`newUser`的类型推断会发生什么变化,为什么?
36.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. newUser的类型推断过程
    • 首先,createUser函数被定义为接受两个参数name(类型为string)和age(类型为number),并返回一个User类型的值。User接口定义了具有namestring类型)和agenumber类型)属性的对象。
    • 当调用createUser('Alice', 30)时,TypeScript根据createUser函数的返回值类型定义User,推断出newUser的类型为User,即一个具有namestring类型)和agenumber类型)属性的对象。
  2. 如果createUser函数的返回值类型定义被省略
    • 当省略createUser函数的返回值类型定义时,TypeScript会根据函数内部的返回值进行类型推断。
    • 在函数内部,返回的是{ name, age },TypeScript会推断出返回值的类型为{ name: string; age: number; }
    • 所以newUser的类型仍然会被推断为{ name: string; age: number; },本质上和原来User接口定义的类型是一样的。这是因为TypeScript能够根据函数返回的对象字面量的结构准确推断出其类型,即使没有显式指定返回值类型。