# function overload in vue
[Ts playground](https://www.typescriptlang.org/play?#code/PTAEHsDcFMCcBtwEMAmoDOBLA5gOyQC4Cus06ogWdqCV-gFABmRuAxgZuLqAA6oqa7YAKJPHgAuULiIBbAEZwAlOPAyAVtBYBueoxZsO3FL34CC4TgEFcKAELgCpqeMmy4AGlDxodApZQAlHAALAidpOVhFCFV1Ai0GZlZ2Lh4+QVNOUJdYd1ggkIkwt1AZOwdM8PdPb3KFJWjNGhoQUHjdJMwpTk8paFwCQj1QQDPtQGy0wHf1QBkIwBC3VsTcbQTBgyNBJBrs4oB+dfcmbYKs9xR953D5UABvGlBQTDpQARlQAF5X0EYULz5oNAAyX9ATBebw+X1wP1A-1AaFez3eVjBP3OVxuNyecKBcJhoCQWhuAF9QNB4OhoLd7gJMSCEXRvn8ATDqZ9aeCUMjrqjMTi8ajsTIefiOaRiLAOCjUelxEhXBybrlsMFxDIZajiqVwI5ASrUVV8igOfitIKaMtUgIAIzyDSgZrgADWUpEJpSxnN7kt1ttDtA6V8tnsGsqXh8VgCCoIzsMZrdoBjcatNrA9vE6RyeXcJQDUiD3kjKwt7vdCeaAFFYLBwLBxAA5cAQGAIZBoaAAD04MXIAGYcbBsNJegR0BmiAR63BEKhyCg663MOhRwRAoQiW2YkTMIu4KAAEwQWCgAAsoEaQA)
``` typescript
// overload signatures 定義
function padding(all: number): object;
function padding(topAndBottom: number, leftAndRight: number): object;
function padding(top: number, right: number, bottom: number, left: number): object;
// function implementation 實際執行的function
function padding(a: number, b?: number, c?: number, d?: number) {
if (b === undefined && c === undefined && d === undefined) {
b = c = d = a;
} else if (c === undefined && d === undefined) {
c = a;
d = b;
}
return {
top: a,
right: b,
bottom: c,
left: d
};
}
padding(1); // ok: all
padding(1, 1); // ok: topAndBottom, leftAndRight
padding(1, 1, 1, 1); // ok: top, right, bottom, left
padding(1, 1, 1); // Error: No overload expects 3 arguments, but overloads do exist that expect either 2 or 4
```
## Pure js version
``` javascript
function a() {
console.log("aaaaa")
}
function b(f = a) {
console.log('bbbbbb')
f();
}
function c() {
console.log("cccc")
}
console.log('------default callback--------')
b(); //prints bbbbbb aaaaa
console.log('------overriding the callback--------')
b(c); //prints bbbbbb cccc
```
## in Vue
![image](https://hackmd.io/_uploads/HkjrFbRgA.png)
function也編譯不過
![image](https://hackmd.io/_uploads/Ski7YZRl0.png)
vue編譯不過
![image](https://hackmd.io/_uploads/Bk01FbAlA.png)
// 結果會統一編譯 name2
in compasibled
![image](https://hackmd.io/_uploads/SyVV9bAlA.png)
同場加應 CSRF [連結](https://blog.techbridge.cc/2017/02/25/csrf-introduction/)
about cookie [連結](https://github.com/aszx87410/blog/issues/17)
重載函式 [連結](https://medium.com/@a0988426059/typescript-%E5%87%BD%E6%95%B8%E9%87%8D%E8%BC%89-function-overloading-72c7df9c45a)