TypeScript中如何初始化类型为(x:number)=>{y:number,z:number}的变量?
问题原因
你写的代码存在两处语法问题,导致触发TS2695报错:
- 箭头函数如果要直接返回对象字面量,不能直接用
{}包裹内容,否则{}会被识别为函数体的块标记,而非对象字面量的边界 - 块内的
x+1,x+2会被解析为逗号运算符表达式,左值x+1没有被使用也没有副作用,符合报错规则的触发条件
正确初始化方式
写法1:用括号包裹返回的对象字面量(推荐简写)
let foo: (x: number) => { y: number, z: number } = (x) => ({ y: x + 1, z: x + 2 });
外层加()可以明确告诉编译器包裹的内容是要返回的表达式,避免被识别为函数块,同时显式标注对象的y、z属性名匹配定义的返回类型即可。
写法2:显式写return语句
let foo: (x: number) => { y: number, z: number } = (x) => { return { y: x + 1, z: x + 2 }; };
如果用{}包裹函数体,就必须显式写return语句返回目标对象,同时标注对应属性名。
内容的提问来源于stack exchange,提问作者Display Name
相关产品推荐
相关产品推荐

