请教大家两个小问题,分别关于 ES6 解构赋值与 TS 的类型

20次阅读

共计 1252 个字符,预计需要花费 4 分钟才能阅读完成。

背景

目前小弟呆在一家小公司,开发算上我只有两个人。我的上司,负责后端,在我眼里他技术比我好得多,会 Java、Python、JS … 我写前端,后端会一些 Node、Python。

事情是这样的,有一次提完 PR,上司 review 我代码的时候跟我说,方法传参用基本类型,别用对象。以及对象的状态属性别挂载在对象上,不需要接口或者类类型来约束。

举例

  • 对象传参,解构赋值
// 使用基本类型传递多个参数的方式
function printUserInfo(name, age, country) {console.log(`Name: ${name}`);
    console.log(`Age: ${age}`);
    console.log(`Country: ${country}`);
}

// 调用函数时直接传递多个基本类型参数
printUserInfo('John', 30, 'USA');

// 使用对象解构赋值传递多个参数的方式
function printUserInfo({name, age, country}) {console.log(`Name: ${name}`);
    console.log(`Age: ${age}`);
    console.log(`Country: ${country}`);
}

// 调用函数时传递一个包含多个参数的对象
const user = {
    name: 'John',
    age: 30,
    country: 'USA'
};

printUserInfo(user);
  • 类型约束对象

数组成员之前用了 YourClass 类作为类型,现在需要新增表示加载状态的属性。

class YourClass {// 类的属性和方法}

interface WithLoadingStatus {isLoading: boolean;}

type YourTypeWithLoadingStatus = YourClass | WithLoadingStatus;

const array: YourTypeWithLoadingStatus[] = [new YourClass(),
    {isLoading: true},
    {isLoading: false}
];

观点

针对第一点,我理解的是,少量参数传参用基本类型,多个用对象。上司的意思大概是,以前栈空间小,会用到对象。其次,对象参数假设在方法内被修改会改变原对象。对方的意思我理解,引用类型作为参数传递的是指针,但是解构赋值相当于声明了局部变量,除了性能上会有额外开销,似乎并不会影响原对象。假设我需要在原有方法上新增参数,使用对象参数可以不用考虑传参顺序。用基本类型的话,调用方法的时候,有些默认参数需要显式的写上去。

针对第二点,上司觉得和 UI 相关的属性不应该写在类类型里,让我了解面向接口编程。看完之后我的理解是,TS 中接口是对对象属性进行约束,面向接口编程中的接口更多的是描述行为方法(实现多继承等),这两者似乎不能等价。

诉求

因为我思维比较发散,跟人沟通容易跳跃。最近忙完手头的开发事务又想起这件事情,也许上次并没有沟通明白。请大家说说自己的看法或建议,谢谢!

正文完
 0