함수
Last updated
interface Foo {
foo: string;
}
// 리턴 타입 annotation을 `: Foo`로 달았습니다
function foo(sample: Foo): Foo {
return sample;
}interface Foo {
foo: string;
}
function foo(sample: Foo) {
return sample; // 추론된 리턴 타입은 'Foo'
}function foo() {
return { fou: 'John Doe' }; // 늦기전에 이것이 `foo`의 철자 오류임을 아는 것은 매우 어렵습니다
}
sendAsJSON(foo());function foo(bar: number, bas?: string): void {
// ..
}
foo(123);
foo(123, 'hello');function foo(bar: number, bas: string = 'hello') {
console.log(bar, bas);
}
foo(123); // 123, hello
foo(123, 'world'); // 123, worldfunction padding(a: number, b?: number, c?: number, d?: any) {
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
};
}// Overloads
function padding(all: number);
function padding(topAndBottom: number, leftAndRight: number);
function padding(top: number, right: number, bottom: number, left: number);
// 함수 바디가 다뤄야 하는 모든 케이스가 반영된 본체의 실제 구현
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); // Okay: all
padding(1,1); // Okay: topAndBottom, leftAndRight
padding(1,1,1,1); // Okay: top, right, bottom, left
padding(1,1,1); // Error: 해당되는 오버로딩이 없음type LongHand = {
(a: number): number;
};
type ShortHand = (a: number) => number;type LongHandAllowsOverloadDeclarations = {
(a: number): number;
(a: string): string;
};