Node.js * TypeScriptでCannot redeclare block-scoped variable

スコープの問題でES6以降ならこの問題は発生しない




例えば
a.ts
const express = require("express")
const router = express.Router()

/* GET home page. */
router.get("/", function (req, res, next) {
 const title: string = "a"
 res.render("index", { title: title })
})

module.exports = router


b.ts
const express = require("express")
const router = express.Router()

/* GET home page. */
router.get("/", function (req, res, next) {
 const title: string = "b"
 res.render("index", { title: title })
})

module.exports = router

これでアウト
TypeScriptが最終的に一つにまとめることを想定しているので同じ名前で宣言してはいけないと言うこと?
ES6以降なら問題ないらしいがそのためにはNode7以降が必要で...

以下のように書き換える

a.ts
{
 const express = require("express")
 const router = express.Router()
 
 /* GET home page. */
 router.get("/", function (req, res, next) {
  const title: string = "a"
  res.render("index", { title: title })
 })
 
 module.exports = router
}

b.ts
{
 const express = require("express")
 const router = express.Router()
 
 /* GET home page. */
 router.get("/", function (req, res, next) {
  const title: string = "b"
  res.render("index", { title: title })
 })
 
 module.exports = router
}


letもconstも変数の巻き上げ自体は行われているみたいだがこれでビルドが通る理由は不明
いわゆる仕様的なものだろうか?


2017年5月1日月曜日