打字稿导入/导出对象和传播

时间:2019-02-07 00:52:09

标签: typescript

我已经使用TS一年多了,但我仍然对导入和导出感到困惑。为什么我不能将导入的对象散布到导出对象中?

/// file1
export {
  PORT,
  SSL_CRT,
  SSL_KEY,
}
// file2
import * as env from 'file1'
// env.PORT is available at this point
export {
   ...env  // [ts] Identifier expected. [1003] 
}

我可以通过以下方法解决此问题,但我知道它与我想要的不一样。

// file2
import * as env from 'file1'
export default {
   ...env  // [ts] Identifier expected. [1003] 
}

2 个答案:

答案 0 :(得分:1)

您尝试做的是重新导出。方法如下:

// file2.ts
export * from './file1'

您无法传播import * as env中的名称空间模块对象。 这是一个特殊的对象,据我所知,JavaScript不允许您传播它。

答案 1 :(得分:0)

我认为这可以按照您期望的方式工作:

// file1.ts
export {
    PORT,
    SSL_CRT,
    SSL_KEY
};
// file2.ts
import * as env from "./file1";

console.log(env); // { PORT: 'foo', SSL_CRT: 'bar', SSL_KEY: 'baz' }

export { env };
// file3.ts
import { env } from "./file2";

console.log(env); // { PORT: 'foo', SSL_CRT: 'bar', SSL_KEY: 'baz' }

因此回答您的问题:您不需要使用散布运算符,因为对象正在隐式地进行结构分解。为什么会发生这种情况,这是一个比我聪明的人的问题。