IGi*_*nny 8 javascript typescript ecmascript-6 es6-modules
我正在 VueJs、Typescript 和 WebPack 中开发一个 Web 应用程序,我对如何管理/拆分功能组(实用程序和服务)感到有些困惑。
我在 GitHub 的各种项目中看到一些函数是直接从文件 ex 中声明和导出的:
实用程序.ts
export function Sum(a:number, b:number):number{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
这可以与导入一起使用:
import {Sum} from "./utilities.ts"
let result = Sum(5,6);
Run Code Online (Sandbox Code Playgroud)
另一个常见的解决方案是声明一个 const 类:
otherUtilities.ts
export const OtherUtilities = {
Sum(a:number, b:number) : number => {
return a+b;
},
Hello() : string => {
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
并导入为:
import {OtherUtilities} from "./otherUtilities.ts"
let result = OtherUtilities.Sum(5,6);
Run Code Online (Sandbox Code Playgroud)
有什么区别?
过去,JS 存在名称冲突问题,但现在通过 Loaders 的导出/导入技术,这个问题应该已经过时了,对吧?
谢谢
Ser*_*eon 13
这个对象:
export const OtherUtilities = {
Sum(a:number, b:number) : number => {
return a+b;
},
Hello() : string => {
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
包含两个完全不相关的功能。它们不需要共享this上下文,彼此不认识,并且可以完美地作为两个单独的函数导出,即使在两个单独的模块中。它们可以属于同一个对象,但没有充分的理由这样做。
另一方面,如果您将它们导出为单独的实体:
export function sum()...
export function hello()...
Run Code Online (Sandbox Code Playgroud)
它们是可摇晃的。如果您的应用程序碰巧只有 import Hello(),它们Sum可以从包中删除。
现在,使用第二种策略,您更有可能遇到命名冲突。您可以使用as关键字阻止它们:
import {Sum} from 'one';
import {Sum as myCustomSum} from 'two';
Run Code Online (Sandbox Code Playgroud)
除了摇树之外,我认为一种风格或另一种风格之间没有太大区别。您可以使用 ECMAScript 模块导出任何内容,可以是函数、字符串、数字或任何其他类型的原语、数组或对象。这在很大程度上取决于您和您团队的代码约定。
一些库曾经导出属于一个大实用程序对象的独立函数,但后来改变了样式并切换到独立命名导出,正是为了启用树摇动(有时,只有独立项目会这样做,例如lodash-es)。
| 归档时间: |
|
| 查看次数: |
10905 次 |
| 最近记录: |