|
@@ -111,6 +111,37 @@ function LogBookTitles(titles: string[]): void {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// Note: no implementation.
|
|
|
|
+function GetTitles(author: string): string[];
|
|
|
|
+function GetTitles(available: boolean): string[];
|
|
|
|
+// Now an implementation:
|
|
|
|
+function GetTitles(bookProperty: any): string[] {
|
|
|
|
+ const allBooks = GetAllBooks();
|
|
|
|
+
|
|
|
|
+ const foundTitles: Array<string> = [];
|
|
|
|
+ if (typeof bookProperty == 'string') {
|
|
|
|
+ // get books by author, add to foundTitles
|
|
|
|
+ for (let book of allBooks) {
|
|
|
|
+ if (book.author === bookProperty) {
|
|
|
|
+ foundTitles.push(book.title);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else if (typeof bookProperty === 'boolean') {
|
|
|
|
+ // get available books, add to foundTitles
|
|
|
|
+ for (let book of allBooks) {
|
|
|
|
+ if (book.available === bookProperty) {
|
|
|
|
+ foundTitles.push(book.title);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ throw new Error('Invalid property type: ' + typeof bookProperty);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return foundTitles;
|
|
|
|
+}
|
|
|
|
+
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
function defaultParamsDemo() {
|
|
function defaultParamsDemo() {
|
|
CreateCustomer('Michelle');
|
|
CreateCustomer('Michelle');
|
|
@@ -163,8 +194,15 @@ function restParamsDemo() {
|
|
myBooks.forEach(title => console.log(title);
|
|
myBooks.forEach(title => console.log(title);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+function overloadDemo() {
|
|
|
|
+ console.log(GetTitles(true));
|
|
|
|
+ console.log(GetTitles('Herman Melville'));
|
|
|
|
+ // No: there is no function signature matching the next call.
|
|
|
|
+ // GetTitles(42);
|
|
|
|
+}
|
|
|
|
|
|
// defaultParamsDemo();
|
|
// defaultParamsDemo();
|
|
// functionTypeDemos();
|
|
// functionTypeDemos();
|
|
// functionCallDefaultParamsDemo();
|
|
// functionCallDefaultParamsDemo();
|
|
-restParamsDemo();
|
|
|
|
|
|
+// restParamsDemo();
|
|
|
|
+overloadDemo();
|