diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 868268325..27dbdcb6c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,22 +13,20 @@ env: jobs: build: runs-on: ubuntu-latest - if: "! contains(github.event.head_commit.message, '[skip ci]')" - - strategy: - matrix: - node-version: [24.x] steps: - uses: actions/checkout@v6 - - name: Use Node.js ${{ matrix.node-version }} + - name: Install Node.js uses: actions/setup-node@v6 with: - node-version: ${{ matrix.node-version }} + node-version: 24.x - name: Install dependencies run: npm install + - name: Execute tests + run: npm run test + - name: Build and validate all steps - run: node tools/builder + run: npm run build diff --git a/package.json b/package.json index 63812095e..e4c49bddc 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,11 @@ }, "scripts": { "build": "node tools/builder", - "start": "node tools/dev-server", "download-assets": "node tools/utils/download-assets", - "knip": "knip --config knip.config.js" + "knip": "knip --config knip.config.js", + "start": "node tools/dev-server", + "test": "npm run typecheck", + "typecheck": "npm run typecheck --workspaces --if-present" }, "devDependencies": { "@highlightjs/cdn-assets": "^11.11.1", diff --git a/packages/quickstart/steps/01/package.json b/packages/quickstart/steps/01/package.json index 1caf56bf7..2b20591ae 100644 --- a/packages/quickstart/steps/01/package.json +++ b/packages/quickstart/steps/01/package.json @@ -5,7 +5,8 @@ "author": "SAP SE", "description": "UI5 Demo App - Quickstart Tutorial", "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/quickstart/steps/02/package.json b/packages/quickstart/steps/02/package.json index 8eed573b3..91bf17e93 100644 --- a/packages/quickstart/steps/02/package.json +++ b/packages/quickstart/steps/02/package.json @@ -5,7 +5,8 @@ "author": "SAP SE", "description": "UI5 Demo App - Quickstart Tutorial", "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/quickstart/steps/03/package.json b/packages/quickstart/steps/03/package.json index 5366e8c07..3132f22b6 100644 --- a/packages/quickstart/steps/03/package.json +++ b/packages/quickstart/steps/03/package.json @@ -5,7 +5,8 @@ "author": "SAP SE", "description": "UI5 Demo App - Quickstart Tutorial", "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/02/package.json b/packages/walkthrough/steps/02/package.json index 21c13c3bb..3cfae4420 100644 --- a/packages/walkthrough/steps/02/package.json +++ b/packages/walkthrough/steps/02/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 2 - Bootstrap", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@ui5/cli": "^4.0.52", diff --git a/packages/walkthrough/steps/03/package.json b/packages/walkthrough/steps/03/package.json index 5c3f741ca..67d0f7a5f 100644 --- a/packages/walkthrough/steps/03/package.json +++ b/packages/walkthrough/steps/03/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 3 - Controls", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/04/package.json b/packages/walkthrough/steps/04/package.json index 0053d2e72..b952e1d9c 100644 --- a/packages/walkthrough/steps/04/package.json +++ b/packages/walkthrough/steps/04/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 4: XML Views", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/05/package.json b/packages/walkthrough/steps/05/package.json index d3d89a26b..90a364a45 100644 --- a/packages/walkthrough/steps/05/package.json +++ b/packages/walkthrough/steps/05/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 5: Controllers", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/06/package.json b/packages/walkthrough/steps/06/package.json index 5f3b3698c..68bacc2fc 100644 --- a/packages/walkthrough/steps/06/package.json +++ b/packages/walkthrough/steps/06/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 6: Modules", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/07/package.json b/packages/walkthrough/steps/07/package.json index 495586132..7ac18fcb1 100644 --- a/packages/walkthrough/steps/07/package.json +++ b/packages/walkthrough/steps/07/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 7: JSON Model", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/08/README.md b/packages/walkthrough/steps/08/README.md index 1bebf7af1..dee76b8dc 100644 --- a/packages/walkthrough/steps/08/README.md +++ b/packages/walkthrough/steps/08/README.md @@ -88,7 +88,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } @@ -121,7 +121,7 @@ sap.ui.define(["sap/m/MessageToast", "sap/ui/core/mvc/Controller", "sap/ui/model // read msg from i18n model const recipient = this.getView()?.getModel()?.getProperty("/recipient/name"); const resourceBundle = this.getView()?.getModel("i18n")?.getResourceBundle(); - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/08/package.json b/packages/walkthrough/steps/08/package.json index e4edcb696..e8a865652 100644 --- a/packages/walkthrough/steps/08/package.json +++ b/packages/walkthrough/steps/08/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 8: Translatable Texts", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/08/webapp/controller/App.controller.ts b/packages/walkthrough/steps/08/webapp/controller/App.controller.ts index 0dbbe2093..524aa5bfe 100644 --- a/packages/walkthrough/steps/08/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/08/webapp/controller/App.controller.ts @@ -30,7 +30,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/09/README.md b/packages/walkthrough/steps/09/README.md index 84130e4e2..b2493a7b5 100644 --- a/packages/walkthrough/steps/09/README.md +++ b/packages/walkthrough/steps/09/README.md @@ -158,7 +158,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/09/package.json b/packages/walkthrough/steps/09/package.json index a42232022..10cbe6c97 100644 --- a/packages/walkthrough/steps/09/package.json +++ b/packages/walkthrough/steps/09/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 9 - Component Configuration", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/09/webapp/controller/App.controller.ts b/packages/walkthrough/steps/09/webapp/controller/App.controller.ts index d7877c8e4..29058d442 100644 --- a/packages/walkthrough/steps/09/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/09/webapp/controller/App.controller.ts @@ -13,7 +13,7 @@ export default class AppController extends Controller { // functions with generic return values require casting const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/10/package.json b/packages/walkthrough/steps/10/package.json index fc6bf9a92..fa2277b77 100644 --- a/packages/walkthrough/steps/10/package.json +++ b/packages/walkthrough/steps/10/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 10 - Descriptor for Applications", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/10/webapp/controller/App.controller.ts b/packages/walkthrough/steps/10/webapp/controller/App.controller.ts index d5342a470..6b3072be1 100644 --- a/packages/walkthrough/steps/10/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/10/webapp/controller/App.controller.ts @@ -12,7 +12,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/11/package.json b/packages/walkthrough/steps/11/package.json index dee3226ac..449f287da 100644 --- a/packages/walkthrough/steps/11/package.json +++ b/packages/walkthrough/steps/11/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 11 - Pages and Panels", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/11/webapp/controller/App.controller.ts b/packages/walkthrough/steps/11/webapp/controller/App.controller.ts index d5342a470..6b3072be1 100644 --- a/packages/walkthrough/steps/11/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/11/webapp/controller/App.controller.ts @@ -12,7 +12,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/12/package.json b/packages/walkthrough/steps/12/package.json index d8c7355b3..7ed6c82c6 100644 --- a/packages/walkthrough/steps/12/package.json +++ b/packages/walkthrough/steps/12/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 12 - Shell Control as Container", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/12/webapp/controller/App.controller.ts b/packages/walkthrough/steps/12/webapp/controller/App.controller.ts index d5342a470..6b3072be1 100644 --- a/packages/walkthrough/steps/12/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/12/webapp/controller/App.controller.ts @@ -12,7 +12,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/13/package.json b/packages/walkthrough/steps/13/package.json index 5d95847a1..6cfe786ad 100644 --- a/packages/walkthrough/steps/13/package.json +++ b/packages/walkthrough/steps/13/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 13 - Margins and Paddings", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/13/webapp/controller/App.controller.ts b/packages/walkthrough/steps/13/webapp/controller/App.controller.ts index d5342a470..6b3072be1 100644 --- a/packages/walkthrough/steps/13/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/13/webapp/controller/App.controller.ts @@ -12,7 +12,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/14/package.json b/packages/walkthrough/steps/14/package.json index 68e8bf124..c2375ab21 100644 --- a/packages/walkthrough/steps/14/package.json +++ b/packages/walkthrough/steps/14/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 14 - Custom CSS and Theme Colors", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/14/webapp/controller/App.controller.ts b/packages/walkthrough/steps/14/webapp/controller/App.controller.ts index d5342a470..6b3072be1 100644 --- a/packages/walkthrough/steps/14/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/14/webapp/controller/App.controller.ts @@ -12,7 +12,7 @@ export default class AppController extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/15/README.md b/packages/walkthrough/steps/15/README.md index a641c4e5a..278d6c059 100644 --- a/packages/walkthrough/steps/15/README.md +++ b/packages/walkthrough/steps/15/README.md @@ -53,7 +53,7 @@ export default class HelloPanel extends Controller { // functions with generic return values require casting const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/15/package.json b/packages/walkthrough/steps/15/package.json index f7b629eb5..91ee064a4 100644 --- a/packages/walkthrough/steps/15/package.json +++ b/packages/walkthrough/steps/15/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 15 - Nested Views", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/15/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/15/webapp/controller/HelloPanel.controller.ts index 9df486f2d..9e6a761f5 100644 --- a/packages/walkthrough/steps/15/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/15/webapp/controller/HelloPanel.controller.ts @@ -13,7 +13,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/16/package.json b/packages/walkthrough/steps/16/package.json index 4cdd281b6..959a37562 100644 --- a/packages/walkthrough/steps/16/package.json +++ b/packages/walkthrough/steps/16/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 16 - Dialogs and Fragments", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/16/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/16/webapp/controller/HelloPanel.controller.ts index 132f65b72..007293a1e 100644 --- a/packages/walkthrough/steps/16/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/16/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/17/README.md b/packages/walkthrough/steps/17/README.md index 3eb5cb761..2c5d32a28 100644 --- a/packages/walkthrough/steps/17/README.md +++ b/packages/walkthrough/steps/17/README.md @@ -51,7 +51,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/17/package.json b/packages/walkthrough/steps/17/package.json index ea842095f..f6152c2db 100644 --- a/packages/walkthrough/steps/17/package.json +++ b/packages/walkthrough/steps/17/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 17 - Fragment Callbacks", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/17/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/17/webapp/controller/HelloPanel.controller.ts index 68c6fe500..2ff9e8c94 100644 --- a/packages/walkthrough/steps/17/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/17/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/18/package.json b/packages/walkthrough/steps/18/package.json index 07a9c759e..35b437467 100644 --- a/packages/walkthrough/steps/18/package.json +++ b/packages/walkthrough/steps/18/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 18 - Icons", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/18/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/18/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/18/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/18/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/19/package.json b/packages/walkthrough/steps/19/package.json index bc59882e0..131c06932 100644 --- a/packages/walkthrough/steps/19/package.json +++ b/packages/walkthrough/steps/19/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 19 - Aggregation Binding", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/19/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/19/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/19/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/19/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/20/package.json b/packages/walkthrough/steps/20/package.json index f97b19eb3..af9f44b3b 100644 --- a/packages/walkthrough/steps/20/package.json +++ b/packages/walkthrough/steps/20/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 20 - Data Types", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/20/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/20/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/20/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/20/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/21/package.json b/packages/walkthrough/steps/21/package.json index a8f6d831e..7e384cbfa 100644 --- a/packages/walkthrough/steps/21/package.json +++ b/packages/walkthrough/steps/21/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 21 - Expression Binding", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/21/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/21/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/21/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/21/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/22/package.json b/packages/walkthrough/steps/22/package.json index d4dd1516a..1a0b7cc8c 100644 --- a/packages/walkthrough/steps/22/package.json +++ b/packages/walkthrough/steps/22/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 22 - Custom Formatters", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/22/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/22/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/22/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/22/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/23/package.json b/packages/walkthrough/steps/23/package.json index 061ca2d9a..977903825 100644 --- a/packages/walkthrough/steps/23/package.json +++ b/packages/walkthrough/steps/23/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 23 - Filtering", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/23/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/23/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/23/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/23/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/24/package.json b/packages/walkthrough/steps/24/package.json index 0043543ac..3bca6467d 100644 --- a/packages/walkthrough/steps/24/package.json +++ b/packages/walkthrough/steps/24/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 24 - Sorting and Grouping", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/24/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/24/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/24/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/24/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/25/package.json b/packages/walkthrough/steps/25/package.json index 8e9c70b8f..f0f11626f 100644 --- a/packages/walkthrough/steps/25/package.json +++ b/packages/walkthrough/steps/25/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 25 - Remote OData Service", "private": true, "scripts": { - "start": "ui5 serve -o index.html" + "start": "ui5 serve -o index.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/25/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/25/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/25/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/25/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/26/package.json b/packages/walkthrough/steps/26/package.json index b43b044a1..77dcaa6cc 100644 --- a/packages/walkthrough/steps/26/package.json +++ b/packages/walkthrough/steps/26/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 26 - Mock Server Configuration", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/26/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/26/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/26/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/26/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/27/package.json b/packages/walkthrough/steps/27/package.json index 4370fd47b..ced7ada2d 100644 --- a/packages/walkthrough/steps/27/package.json +++ b/packages/walkthrough/steps/27/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 27 - Unit Test with QUnit", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/27/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/27/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/27/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/27/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/28/package.json b/packages/walkthrough/steps/28/package.json index 3e6e99d46..8613c8ba8 100644 --- a/packages/walkthrough/steps/28/package.json +++ b/packages/walkthrough/steps/28/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 28 - Integration Test with OPA", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/28/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/28/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/28/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/28/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/29/package.json b/packages/walkthrough/steps/29/package.json index d2aee02d1..801f7788f 100644 --- a/packages/walkthrough/steps/29/package.json +++ b/packages/walkthrough/steps/29/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 29 - Debugging Tools", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/29/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/29/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/29/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/29/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/30/package.json b/packages/walkthrough/steps/30/package.json index b435ce93b..7e7d8bfb0 100644 --- a/packages/walkthrough/steps/30/package.json +++ b/packages/walkthrough/steps/30/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 30 - Routing and Navigation", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/30/tsconfig.json b/packages/walkthrough/steps/30/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/30/tsconfig.json +++ b/packages/walkthrough/steps/30/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/30/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/30/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/30/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/30/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/31/README.md b/packages/walkthrough/steps/31/README.md index 914558b1a..912c42e8a 100644 --- a/packages/walkthrough/steps/31/README.md +++ b/packages/walkthrough/steps/31/README.md @@ -104,6 +104,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -116,7 +117,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent(((item.getBindingContext("invoice") as Context).getPath() as string).substring(1)) }); } }; @@ -139,7 +140,7 @@ sap.ui.define(["sap/ui/core/mvc/Controller", "sap/ui/model/json/JSONModel", "sap }); } }); - ; + return App; }); @@ -161,7 +162,7 @@ The `bindElement` function is creating a binding context for a OpenUI5 control a ```ts import Controller from "sap/ui/core/mvc/Controller"; import UIComponent from "sap/ui/core/UIComponent"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; /** * @namespace ui5.walkthrough.controller @@ -170,11 +171,11 @@ export default class Detail extends Controller { onInit(): void { const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent( (event.getParameter("arguments") as any).invoicePath), model: "invoice" }); diff --git a/packages/walkthrough/steps/31/package.json b/packages/walkthrough/steps/31/package.json index fadaf0651..86a95b1c5 100644 --- a/packages/walkthrough/steps/31/package.json +++ b/packages/walkthrough/steps/31/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 31 - Routing with Parameters", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/31/tsconfig.json b/packages/walkthrough/steps/31/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/31/tsconfig.json +++ b/packages/walkthrough/steps/31/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/31/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/31/webapp/controller/Detail.controller.ts index a8d13cfd5..b4c211ffa 100644 --- a/packages/walkthrough/steps/31/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/31/webapp/controller/Detail.controller.ts @@ -1,6 +1,6 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import UIComponent from "sap/ui/core/UIComponent"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; /** * @namespace ui5.walkthrough.controller @@ -9,11 +9,11 @@ export default class Detail extends Controller { onInit(): void { const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent( (event.getParameter("arguments") as any).invoicePath), model: "invoice" }); diff --git a/packages/walkthrough/steps/31/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/31/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/31/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/31/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/31/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/31/webapp/controller/InvoiceList.controller.ts index e99cdbd32..f571980c4 100644 --- a/packages/walkthrough/steps/31/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/31/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import UIComponent from "sap/ui/core/UIComponent"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/32/package.json b/packages/walkthrough/steps/32/package.json index aa8205e13..06fd129f1 100644 --- a/packages/walkthrough/steps/32/package.json +++ b/packages/walkthrough/steps/32/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 32 - Routing Back and History", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/32/tsconfig.json b/packages/walkthrough/steps/32/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/32/tsconfig.json +++ b/packages/walkthrough/steps/32/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/32/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/32/webapp/controller/Detail.controller.ts index 004428e59..6373e005a 100644 --- a/packages/walkthrough/steps/32/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/32/webapp/controller/Detail.controller.ts @@ -1,7 +1,7 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import UIComponent from "sap/ui/core/UIComponent"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; /** * @namespace ui5.walkthrough.controller @@ -10,11 +10,11 @@ export default class Detail extends Controller { onInit(): void { const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent( (event.getParameter("arguments") as any).invoicePath), model: "invoice" }); diff --git a/packages/walkthrough/steps/32/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/32/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/32/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/32/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/32/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/32/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/32/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/32/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/33/README.md b/packages/walkthrough/steps/33/README.md index f5980cb79..8a9871795 100644 --- a/packages/walkthrough/steps/33/README.md +++ b/packages/walkthrough/steps/33/README.md @@ -439,7 +439,7 @@ In the `onObjectMatched` method, we call the `reset` method to make it possible ```ts import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -454,13 +454,13 @@ export default class Detail extends Controller { onInit(): void { const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -480,9 +480,9 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/33/package.json b/packages/walkthrough/steps/33/package.json index d5dae8f09..348ec4f2c 100644 --- a/packages/walkthrough/steps/33/package.json +++ b/packages/walkthrough/steps/33/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 33 - Custom Controls", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/33/tsconfig.json b/packages/walkthrough/steps/33/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/33/tsconfig.json +++ b/packages/walkthrough/steps/33/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/33/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/33/webapp/controller/Detail.controller.ts index 51276ac84..cf895c407 100644 --- a/packages/walkthrough/steps/33/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/33/webapp/controller/Detail.controller.ts @@ -1,5 +1,5 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -14,13 +14,13 @@ export default class Detail extends Controller { onInit(): void { const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -40,8 +40,8 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/33/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/33/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/33/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/33/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/33/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/33/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/33/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/33/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/34/package.json b/packages/walkthrough/steps/34/package.json index 0ee3d0117..72a842e99 100644 --- a/packages/walkthrough/steps/34/package.json +++ b/packages/walkthrough/steps/34/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 34 - Responsiveness", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/34/tsconfig.json b/packages/walkthrough/steps/34/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/34/tsconfig.json +++ b/packages/walkthrough/steps/34/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/34/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/34/webapp/controller/Detail.controller.ts index 51276ac84..cf895c407 100644 --- a/packages/walkthrough/steps/34/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/34/webapp/controller/Detail.controller.ts @@ -1,5 +1,5 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -14,13 +14,13 @@ export default class Detail extends Controller { onInit(): void { const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -40,8 +40,8 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/34/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/34/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/34/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/34/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/34/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/34/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/34/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/34/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/35/README.md b/packages/walkthrough/steps/35/README.md index b8a8659bc..cc81fe410 100644 --- a/packages/walkthrough/steps/35/README.md +++ b/packages/walkthrough/steps/35/README.md @@ -163,7 +163,7 @@ In the `Detail` controller we simply add the view model with our currency defini ```ts import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -181,10 +181,10 @@ export default class Detail extends Controller { const viewModel = new JSONModel({ currency: "EUR" }); - this.getView().setModel(viewModel, "view"); + this.getView()?.setModel(viewModel, "view"); const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } //... }; diff --git a/packages/walkthrough/steps/35/package.json b/packages/walkthrough/steps/35/package.json index c59d137fa..64e30c219 100644 --- a/packages/walkthrough/steps/35/package.json +++ b/packages/walkthrough/steps/35/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 35 - Device Adaptation", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/35/tsconfig.json b/packages/walkthrough/steps/35/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/35/tsconfig.json +++ b/packages/walkthrough/steps/35/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/35/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/35/webapp/controller/Detail.controller.ts index 6ced617c4..e829892ce 100644 --- a/packages/walkthrough/steps/35/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/35/webapp/controller/Detail.controller.ts @@ -1,5 +1,5 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -17,16 +17,16 @@ export default class Detail extends Controller { const viewModel = new JSONModel({ currency: "EUR" }); - this.getView().setModel(viewModel, "view"); + this.getView()?.setModel(viewModel, "view"); const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -46,8 +46,8 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/35/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/35/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/35/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/35/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/35/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/35/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/35/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/35/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/36/README.md b/packages/walkthrough/steps/36/README.md index a3835dc35..1c801c4fb 100644 --- a/packages/walkthrough/steps/36/README.md +++ b/packages/walkthrough/steps/36/README.md @@ -97,7 +97,7 @@ import Component from "../Component"; */ export default class App extends Controller { onInit(): void { - this.getView().addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass()) + this.getView()?.addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass() as string); } }; diff --git a/packages/walkthrough/steps/36/package.json b/packages/walkthrough/steps/36/package.json index cfbab00d4..22eb2d9c2 100644 --- a/packages/walkthrough/steps/36/package.json +++ b/packages/walkthrough/steps/36/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 36 - Content Density", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/36/tsconfig.json b/packages/walkthrough/steps/36/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/36/tsconfig.json +++ b/packages/walkthrough/steps/36/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/36/webapp/controller/App.controller.ts b/packages/walkthrough/steps/36/webapp/controller/App.controller.ts index 74b983ab5..01b9915b8 100644 --- a/packages/walkthrough/steps/36/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/36/webapp/controller/App.controller.ts @@ -6,6 +6,6 @@ import Component from "../Component"; */ export default class App extends Controller { onInit(): void { - this.getView().addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass()) + this.getView()?.addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass() as string); } }; diff --git a/packages/walkthrough/steps/36/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/36/webapp/controller/Detail.controller.ts index 6ced617c4..e829892ce 100644 --- a/packages/walkthrough/steps/36/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/36/webapp/controller/Detail.controller.ts @@ -1,5 +1,5 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -17,16 +17,16 @@ export default class Detail extends Controller { const viewModel = new JSONModel({ currency: "EUR" }); - this.getView().setModel(viewModel, "view"); + this.getView()?.setModel(viewModel, "view"); const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -46,8 +46,8 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/36/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/36/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/36/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/36/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/36/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/36/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/36/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/36/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/37/package.json b/packages/walkthrough/steps/37/package.json index b41c4b53a..43df5bcc0 100644 --- a/packages/walkthrough/steps/37/package.json +++ b/packages/walkthrough/steps/37/package.json @@ -5,7 +5,8 @@ "description": "OpenUI5 TypeScript Walkthrough: Step 37 - Accessibility", "private": true, "scripts": { - "start": "ui5 serve -o test/mockServer.html" + "start": "ui5 serve -o test/mockServer.html", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/37/tsconfig.json b/packages/walkthrough/steps/37/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/37/tsconfig.json +++ b/packages/walkthrough/steps/37/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/37/webapp/controller/App.controller.ts b/packages/walkthrough/steps/37/webapp/controller/App.controller.ts index 74b983ab5..ff42e58cf 100644 --- a/packages/walkthrough/steps/37/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/37/webapp/controller/App.controller.ts @@ -1,11 +1,12 @@ import Controller from "sap/ui/core/mvc/Controller"; import Component from "../Component"; + /** * @namespace ui5.walkthrough.controller */ export default class App extends Controller { onInit(): void { - this.getView().addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass()) + this.getView()?.addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass() as string); } }; diff --git a/packages/walkthrough/steps/37/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/37/webapp/controller/Detail.controller.ts index 6ced617c4..e829892ce 100644 --- a/packages/walkthrough/steps/37/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/37/webapp/controller/Detail.controller.ts @@ -1,5 +1,5 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -17,16 +17,16 @@ export default class Detail extends Controller { const viewModel = new JSONModel({ currency: "EUR" }); - this.getView().setModel(viewModel, "view"); + this.getView()?.setModel(viewModel, "view"); const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -46,8 +46,8 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/37/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/37/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/37/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/37/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/37/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/37/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/37/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/37/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } }; diff --git a/packages/walkthrough/steps/38/package.json b/packages/walkthrough/steps/38/package.json index 6e0c33cfd..519c82ba0 100644 --- a/packages/walkthrough/steps/38/package.json +++ b/packages/walkthrough/steps/38/package.json @@ -7,7 +7,8 @@ "scripts": { "start": "ui5 serve -o test/mockServer.html", "build": "ui5 build --all --clean-dest", - "serve-dist": "ws --compress -d dist --open" + "serve-dist": "ws --compress -d dist --open", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@types/openui5": "^1.147.0", diff --git a/packages/walkthrough/steps/38/tsconfig.json b/packages/walkthrough/steps/38/tsconfig.json index 1c120a04b..644279d16 100644 --- a/packages/walkthrough/steps/38/tsconfig.json +++ b/packages/walkthrough/steps/38/tsconfig.json @@ -6,7 +6,6 @@ "skipLibCheck": true, "allowJs": true, "strict": true, - "strictNullChecks": false, "strictPropertyInitialization": false, "rootDir": "webapp", "baseUrl": "./", diff --git a/packages/walkthrough/steps/38/webapp/controller/App.controller.ts b/packages/walkthrough/steps/38/webapp/controller/App.controller.ts index 74b983ab5..01b9915b8 100644 --- a/packages/walkthrough/steps/38/webapp/controller/App.controller.ts +++ b/packages/walkthrough/steps/38/webapp/controller/App.controller.ts @@ -6,6 +6,6 @@ import Component from "../Component"; */ export default class App extends Controller { onInit(): void { - this.getView().addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass()) + this.getView()?.addStyleClass((this.getOwnerComponent() as Component).getContentDensityClass() as string); } }; diff --git a/packages/walkthrough/steps/38/webapp/controller/Detail.controller.ts b/packages/walkthrough/steps/38/webapp/controller/Detail.controller.ts index 6ced617c4..e829892ce 100644 --- a/packages/walkthrough/steps/38/webapp/controller/Detail.controller.ts +++ b/packages/walkthrough/steps/38/webapp/controller/Detail.controller.ts @@ -1,5 +1,5 @@ import Controller from "sap/ui/core/mvc/Controller"; -import { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; +import Route, { Route$PatternMatchedEvent } from "sap/ui/core/routing/Route"; import History from "sap/ui/core/routing/History"; import MessageToast from "sap/m/MessageToast"; import ProductRating, { ProductRating$ChangeEvent } from "../control/ProductRating"; @@ -17,16 +17,16 @@ export default class Detail extends Controller { const viewModel = new JSONModel({ currency: "EUR" }); - this.getView().setModel(viewModel, "view"); + this.getView()?.setModel(viewModel, "view"); const router = UIComponent.getRouterFor(this); - router.getRoute("detail").attachPatternMatched(this.onObjectMatched, this); + (router.getRoute("detail") as Route).attachPatternMatched(this.onObjectMatched, this); } onObjectMatched(event: Route$PatternMatchedEvent): void { (this.byId("rating") as ProductRating).reset(); - this.getView().bindElement({ + this.getView()?.bindElement({ path: "/" + window.decodeURIComponent((event.getParameter("arguments") as any).invoicePath), model: "invoice" }); @@ -46,8 +46,8 @@ export default class Detail extends Controller { onRatingChange(event: ProductRating$ChangeEvent): void { const value = event.getParameter("value"); - const resourceBundle = (this?.getView().getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; + const resourceBundle = (this?.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - MessageToast.show(resourceBundle.getText("ratingConfirmation", [value])); + MessageToast.show(resourceBundle.getText("ratingConfirmation", [value]) as string); } }; diff --git a/packages/walkthrough/steps/38/webapp/controller/HelloPanel.controller.ts b/packages/walkthrough/steps/38/webapp/controller/HelloPanel.controller.ts index 9b8457831..333931030 100644 --- a/packages/walkthrough/steps/38/webapp/controller/HelloPanel.controller.ts +++ b/packages/walkthrough/steps/38/webapp/controller/HelloPanel.controller.ts @@ -14,7 +14,7 @@ export default class HelloPanel extends Controller { // read msg from i18n model const recipient = (this.getView()?.getModel() as JSONModel)?.getProperty("/recipient/name"); const resourceBundle = (this.getView()?.getModel("i18n") as ResourceModel)?.getResourceBundle() as ResourceBundle; - const msg = resourceBundle.getText("helloMsg", [recipient]); + const msg = resourceBundle.getText("helloMsg", [recipient]) as string; // show message MessageToast.show(msg); } diff --git a/packages/walkthrough/steps/38/webapp/controller/InvoiceList.controller.ts b/packages/walkthrough/steps/38/webapp/controller/InvoiceList.controller.ts index e1d13cd84..a0b8a86a7 100644 --- a/packages/walkthrough/steps/38/webapp/controller/InvoiceList.controller.ts +++ b/packages/walkthrough/steps/38/webapp/controller/InvoiceList.controller.ts @@ -7,6 +7,7 @@ import ListBinding from "sap/ui/model/ListBinding"; import Event from "sap/ui/base/Event"; import ObjectListItem from "sap/m/ObjectListItem"; import UIComponent from "sap/ui/core/UIComponent"; +import Context from "sap/ui/model/Context"; /** * @namespace ui5.walkthrough.controller @@ -37,7 +38,7 @@ export default class App extends Controller { const item = event.getSource() as ObjectListItem; const router = UIComponent.getRouterFor(this); router.navTo("detail", { - invoicePath: window.encodeURIComponent(item.getBindingContext("invoice").getPath().substring(1)) + invoicePath: window.encodeURIComponent((item.getBindingContext("invoice") as Context).getPath().substring(1)) }); } };