4

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

 1 month ago
source link: https://www.v2ex.com/t/1028584
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  问与答

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

  samuelclassic · 12 小时 0 分钟前 · 377 次点击

目前小弟呆在一家小公司,开发算上我只有两个人。我的上司,负责后端,在我眼里他技术比我好得多,会 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 中接口是对对象属性进行约束,面向接口编程中的接口更多的是描述行为方法(实现多继承等),这两者似乎不能等价。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK