iT邦幫忙

1

javascript 函數簽章問題

想請問一下大大們這種函數簽章要如何實現?
fs.readdir(path[, options], callback)

function LS(userDir, path='/' ,cb) {
    fs.readdir(userDir+path, (err, files)=> {
        cb(files);
    })
}

我想要寫一個函數來包裝readdir, 但path那個參數是option的,如果沒傳就默認'/'
但cb那個簽章是必要的。但我沒辦法這樣用:

LS(userDir, ()=> {
    // call back
);

// 或

LS(userDir, '/temp', ()=> {
    // call back
});
看更多先前的討論...收起先前的討論...
淺水員 iT邦研究生 4 級 ‧ 2020-04-19 19:18:23 檢舉
可以用 typeof 判斷傳入的參數型態
fillano iT邦超人 1 級 ‧ 2020-04-19 20:53:11 檢舉
Javascript沒有函數簽章,所以你得自己檢查參數型別來做判斷。
jokie7585 iT邦新手 5 級 ‧ 2020-04-20 00:53:22 檢舉
想問一下兩位,所以readdir 可以有這樣的簽章是基於typeScript的語法跟特性嗎?
jokie7585 iT邦新手 5 級 ‧ 2020-04-20 01:02:59 檢舉
最近開始嘗試規劃大的專案,發現越寫越髒..沒有好好地寫文件到後期就是挖東牆補西牆一直惡性循環.....發現很多套件都是用typeScript寫的,不管在Robustness跟jdoc等等支援都寫得很漂亮QQ

1 個回答

2
dragonH
iT邦超人 5 級 ‧ 2020-04-19 21:53:22
最佳解答

不然你可以考慮這樣寫

const fs = require('fs');

const LS = ({ userDir, path, cb }) => {
  const _userDir = userDir;
  const _path = path || '/';
  const _cb = cb;
  fs.readdir(`${_userDir}${_path}`, (err, files) => {
    if (err) {
      throw new Error(err);
    }
    _cb(files);
  });
};
const cb = (input) => {
  console.log(input);
};
LS({ userDir: '', cb  });
jokie7585 iT邦新手 5 級 ‧ 2020-04-20 00:52:05 檢舉

確實這樣解很合理w
但還是想問問readdir可以做到那樣是因為typeSript的特性嗎?

dragonH iT邦超人 5 級 ‧ 2020-04-20 01:34:58 檢舉

應該算吧

typescript 支援 overload

但是 typescript 也是編譯成 javascript

所以也要有辦法編譯成 javascript 看得懂的東西

上面兩位大大說的檢查 type 跟 argument 的數量可以試試

jokie7585 iT邦新手 5 級 ‧ 2020-04-20 08:58:23 檢舉

好的 謝謝 >w<

我要發表回答

立即登入回答