无法重新声明块范围变量'reducer'(打字稿)

时间:2016-07-27 01:44:13

标签: typescript

我正在尝试从一本书中运行一些示例代码,我从Cannot redeclare block-scoped variable 'reducer'收到错误tsc,我不确定为什么?

tsc -v 
// Version 2.1.0-dev.20160726

然后我像这样运行ts-node:

ts-node 01-identity-reducer.ts

01-识别-reducer.ts:

interface Action {
  type: string;
  payload?: any;
}

interface Reducer<T> {
  (state: T, action: Action): T;
}

let reducer: Reducer<number> = (state: number, action: Action) => {
  return state;
};

console.log( reducer(0, null) ); // should output -> 0

错误

    TSError: ⨯ Unable to compile TypeScript
01-identity-reducer.ts (10,5): Cannot redeclare block-scoped variable 'reducer'. (2451)
    at getOutput (/Users/person/.nvm/versions/node/v5.0.0/lib/node_modules/ts-node/src/index.ts:258:17)
    at /Users/person/.nvm/versions/node/v5.0.0/lib/node_modules/ts-node/src/index.ts:267:16
    at Object.compile (/Users/person/.nvm/versions/node/v5.0.0/lib/node_modules/ts-node/src/index.ts:403:17)
    at loader (/Users/person/.nvm/versions/node/v5.0.0/lib/node_modules/ts-node/src/index.ts:289:33)
    at Object.require.extensions.(anonymous function) [as .ts] (/Users/person/.nvm/versions/node/v5.0.0/lib/node_modules/ts-node/src/index.ts:306:14)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:457:10)
    at Object.<anonymous> (/Users/person/.nvm/versions/node/v5.0.0/lib/node_modules/ts-node/src/_bin.ts:179:12)
    at Module._compile (module.js:425:26)

2 个答案:

答案 0 :(得分:3)

  

无法重新声明块范围变量&#39; reducer&#39;来自tsc,我不知道为什么

如果您的文件中没有根级别导入或导出,则会将其视为全局模块。显然还有另一个 全局文件并且声明了变量reducer

修复

转移到模块(commonjs是一个很好的选择)。或者将let更改为var,这应该会在声明另一个reducer的位置出错。

PS:And IDE can give a much nicer experience here giving you the other variable declaration locations upfront

答案 1 :(得分:1)

只需在其周围导出命名空间。 export namespace WhatYouLike { ...code... }