SlideShare a Scribd company logo
An Insight company
Bob German
Principal Architect
Developing SharePoint Widgets
in TypeScript
Bob German
Bob is a Principal Architect at BlueMetal, where he
leads Office 365 and SharePoint development for
enterprise customers.
Cloud & Services
Content & Collaboration
Data & Analytics
Devices & Mobility
Strategy & Design
An Insight company
@Bob1German
Agenda
• The Road Ahead for
SharePoint Development
• About Widgets
• About TypeScript
• TypeScript Widgets Today
• TypeScript Widgets in
SharePoint Framework
• Resources
A Geological View of SharePoint
ASP.NET WebForms
ASP.NET AJAX, Scripting On Demand
SharePoint Page Models
XSLT
Custom Actions (JavaScript)
JSLink, Display Templates
Add-in Model
• A completely new SharePoint UI for Office 365 and SharePoint
2016
• New client-side page model
• Modern and responsive – allows “mobile first” development for
SharePoint
• Phase in over time
• Client-side web parts work on both classic and client-side pages
(Check out O365 blogs to try the Canvas)
• Mix classic and client-side pages in a SharePoint site
SharePoint Framework: A Clean Slate
Microsoft is modernizing SharePoint
Over the next few years, Microsoft will change the entire
SharePoint user experience to meet the needs of a modern,
mobile workforce.
Web Parts in O365
In preview now
New Pages
O365
SP2016 Feature Pack
early 2017
Web Era Cloud and Device Era
It’s like upgrading a car, one part at a time – while you’re driving it
cross country!
Classic
SharePoint
SharePoint
Framework
Future-proof
SharePoint
Development
Too Many SharePoint Development Models!
Farm
Solutions
Sandboxed
Solutions
Add-in
Model
Content
Editor WP
SharePoint
Framework
Q: What do they have in common?
A: HTML and JavaScript
Widgets to the rescue!
• Commonly used on the Internet called
”Web Widgets”, ”Plugins”, ”Embeds”, etc.
• It’s just a clever piece of HTML and
Javascript that acts like a web part
• Why not use the same pattern in
SharePoint?
Widgets to the rescue!
One widget can be
packaged many ways
Add-in
Model
Content
Editor WP
SharePoint
Framework
Farm
Solutions
Widgets in Action: BlueMetal Intranet
SharePoint Online using
Light Branding and Widgets
1. My Clients & Projects List
2. News Feed
3. Tabbed New Hire and Anniversary
Carousel
4. Tabbed Calendars/Discussions
5. Twitter Feed
What makes a good widget?
1
ISOLATED – so they won’t interfere with other
widgets or the rest of the page
Can you run multiple copies of the widget on a page?
2
EFFICIENT – so they load quickly Does the page get noticeably slower as you add
widgets?
3
SELF-CONTAINED – so they’re easy to reuse Does the widget work without special page elements
such as element ID’s, scripts, and CSS references?
4
MODERN – so they’re easier to write and maintain Is the widget written in a modern JavaScript
framework such as AngularJS or Knockout?
Widget Wrangler
• Small open source
JavaScript Framework
• No dependencies on
any other scripts or
frameworks
• Works with popular JS
frameworks (Angular,
Knockout, jQuery,
etc.)
• Minimizes impact on
the overall page when
several instances are
present
<div>
<div ng-controller="main as vm">
<h1>Hello{{vm.space()}}{{vm.name}}!</h1>
Who should I say hello to?
<input type="text" ng-model="vm.name" />
</div>
<script type="text/javascript" src="pnp-ww.js“
ww-appName="HelloApp“
ww-appType="Angular“
ww-appScripts=
'[{"src": “~/angular.min.js", "priority":0},
{"src": “~/script.js", "priority":1}]'>
</script>
</div>
AngularJS Sample
demo
JavaScript Widgets
http://bit.ly/ww-jq1 - jQuery widget
http://bit.ly/ww-ng1 - Hello World widget in Angular
http://bit.ly/ww-ng2 - Weather widget in Angular
Introduction to TypeScript
Why Typescript?
1. Static type checking catches errors earlier
2. Intellisense
3. Use ES6 features in ES3, ES5 (or at least get compatibility checking)
4. Class structure familiar to .NET programmers
5. Prepare for AngularJS 2.0
let x = 5;
for (let x=1; x<10; x++) {
console.log (‘x is ‘ + x.toString());
}
console.log (‘In the end, x is ‘ +
x.toString());
var x = -1;
for (var x_1 = 1; x_1 < 10; x_1++) {
console.log("x is " + x_1.toString());
}
console.log("In the end, x is " +
x.toString()); // -1
Setup steps:
• Install VS Code
• Install Node (https://nodejs.org/en/download)
• npm install –g typescript
• Ensure no old versions of tsc are on your path; VS
adds:
C:Program Files (x86)Microsoft
SDKsTypeScript1.0
• In VS Code create tsconfig.json in the root of your
folder
{
"compilerOptions": {
"target": "es5“,
"sourceMap": true
}
}
• Use Ctrl+Shift+B to build – first time click the
error to define a default task runner
Edit task runner and un-comment the 2nd
example in the default
• npm install –g http-server
(In a command prompt, run http-server and
browse to http://localhost:8080/)
VS Code Environment
Setup steps:
• Install Visual Studio
• For VS2012 or 2013, install TypeScript
extension
• Build and debug the usual way
Visual Studio Environment
(1) Type Annotations
var myString: string = ‘Hello, world';
var myNum : number = 123;
var myAny : any = "Hello";
myString = <number>myAny;
var myDate: Date = new Date;
var myElement: HTMLElement = document.getElementsByTagName('body')[0];
var myFunc : (x:number) => number =
function(x:number) : number { return x+1; }
var myPeople: {firstName: string, lastName: string}[] =
[
{ firstName: “Alice", lastName: “Grapes" },
{ firstName: “Bob", lastName: “German" }
]
Intrinsics
Any and
Casting
Built-in
objects
Functions
Complex
Types
(2) ES6 Compatibility
var myFunc : (nx:number) => number =
(n:number) => {
return n+1;
}
let x:number = 1;
if (true) { let x:number = 100; }
if (x === 1) { alert ('It worked!') }
var target: string = ‘world';
var greeting: string = `Hello, ${target}’;
“Fat Arrow”
function
syntax
Block
scoped
variables
Template
strings
(3) Classes and Interfaces
interface IPerson {
getName(): string;
}
class Person implements IPerson {
private firstName: string;
private lastName: string;
constructor (firstName: string, lastName:string) {
this.firstName = firstName;
this.lastName = lastName;
}
getName() { return this.firstName + " " + this.lastName; }
}
var me: IPerson = new Person("Bob", "German");
var result = me.getName();
Interface
Class
Usage
(4) Typescript Definitions
var oldStuff = oldStuff || {};
oldStuff.getMessage = function() {
var time = (new Date()).getHours();
var message = "Good Day"
if (time < 12) {
message = "Good Morning"
} else if (time <18) {
message = "Good Afternoon"
} else {
message = "Good Evening"
}
return message;
};
interface IMessageGiver {
getMessage: () => string
}
declare var oldStuff: IMessageGiver;
var result:string = oldStuff.getMessage();
document.getElementById('output').innerHTML = result;
myCode.ts
(TypeScript code wants to call legacy JavaScript)
oldStuff.js
(legacy JavaScript)
oldStuff.d.ts
(TypeScript Definition)
demo
Typescript Widgets Today
• Provisioning with PowerShell (http://bit.ly/PSProvisioning)
• SharePoint Site Classification Widget (http://bit.ly/TSMetadata)
• Weather Widget (http://bit.ly/TSWeather)
A Brief Introduction
SharePoint Framework
Project Folder
/dest
/sharepoint
SP Framework Development Process
Project Folder
/src
JavaScript
Bundles
.spapp
Local
workbench
workbench.aspx
in SharePoint
Content Delivery
Network
SharePoint
Client-side “App”
Deplyed in
SharePoint
1
2
3
@Bob1German
demo
Weather Web Part in SPFx
Getting ready for the future…
• Write web parts and forms for Classic SharePoint today for easy
porting to SharePoint Framework
• Start learning TypeScript and a modern “tool chain”
(VS Code, Gulp, WebPack)
• Download the SPFx Preview and give it a spin
Resources
Widget Wrangler
• http://bit.ly/ww-github
• http://bit.ly/ww-intro
(includes links to widgets in Plunker)
TypeScript Playground
• http://bit.ly/TSPlayground
SharePoint Framework
• http://bit.ly/SPFxBlog
Bob’s TS Code Samples
• http://bit.ly/LearnTypeScript
• http://bit.ly/TSWeather
An Insight company
Thank you.

More Related Content

PPTX
SharePoint Development with the SharePoint Framework
PPTX
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
PPTX
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
PPTX
SharePoint Framework - Developer Preview
PPTX
Modern SharePoint Development using Visual Studio Code
PPTX
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
PPTX
COB - Azure Functions for Office 365 developers
PPTX
Application Lifecycle Management for Office 365 development
SharePoint Development with the SharePoint Framework
Chris O'Brien - Modern SharePoint sites and the SharePoint Framework - reference
Chris OBrien - Pitfalls when developing with the SharePoint Framework (SPFx)
SharePoint Framework - Developer Preview
Modern SharePoint Development using Visual Studio Code
[Patel] SPFx: An ISV Insight into latest Microsoft's customization model
COB - Azure Functions for Office 365 developers
Application Lifecycle Management for Office 365 development

What's hot (20)

PPTX
Deep-dive building solutions on the SharePoint Framework
PPTX
Building solutions with the SharePoint Framework - introduction
PPTX
Application innovation & Developer Productivity
PPTX
Do's and don'ts for Office 365 development
PPTX
Deep dive into share point framework webparts
PPTX
Building productivity solutions with Microsoft Graph
PPTX
Build a SharePoint website in 60 minutes
PPTX
Building high scale, highly available websites in SharePoint 2010
PPTX
Developing an aspnet web application
PPTX
Introduction to ASP.NET
PDF
SPUnite17 Timer Jobs Event Handlers
PPTX
ECS19 Bert Jansen - Modernizing your existing sites
PPTX
Introduction to ASP.NET
PPT
ASP.NET Tutorial - Presentation 1
PPTX
ASP.NET 5 Overview: Post RTM
PPTX
ASP.NET 5 Overview for Apex Systems
PPTX
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
PPTX
Unity Connect Haarlem 2016 - The Lay of the Land of Client-Side Development c...
PPTX
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
PPTX
ASP.NET Lecture 1
Deep-dive building solutions on the SharePoint Framework
Building solutions with the SharePoint Framework - introduction
Application innovation & Developer Productivity
Do's and don'ts for Office 365 development
Deep dive into share point framework webparts
Building productivity solutions with Microsoft Graph
Build a SharePoint website in 60 minutes
Building high scale, highly available websites in SharePoint 2010
Developing an aspnet web application
Introduction to ASP.NET
SPUnite17 Timer Jobs Event Handlers
ECS19 Bert Jansen - Modernizing your existing sites
Introduction to ASP.NET
ASP.NET Tutorial - Presentation 1
ASP.NET 5 Overview: Post RTM
ASP.NET 5 Overview for Apex Systems
Chris O'Brien - Best bits of Azure for Office 365/SharePoint developers
Unity Connect Haarlem 2016 - The Lay of the Land of Client-Side Development c...
ECS 19 - Chris O'Brien - The hit list - Office 365 dev techniques you should ...
ASP.NET Lecture 1
Ad

Similar to TypeScript and SharePoint Framework (20)

PPTX
Future-proof Development for Classic SharePoint
PPTX
German introduction to sp framework
PPTX
Power up your Project Sites - SPS New Hampshire 2015
PPTX
Building Flexible SharePoint Solutions with AngularJS
PPTX
Chris O'Brien - Introduction to the SharePoint Framework for developers
PDF
TypeScript for Java Developers
PPTX
The advantage of developing with TypeScript
PPTX
AngularConf2015
PPTX
Client Object Model - SharePoint Extreme 2012
PPTX
SharePoint and the User Interface with JavaScript
PDF
Download Complete JavaScript for NET Developers 1st Edition Ovais Mehboob Ahm...
KEY
User Interface Development with jQuery
PDF
SPUnite17 TypeScript for SharePoint Developers
PPTX
Call for Action SharePoint Developers - Server Side is dead, long live the Cl...
PPTX
SharePoint Framework 101 (SPFx)
PDF
SPUnite17 Building Great Client Side Web Parts with SPFx
PPTX
Typescript 102 angular and type script
PPTX
SharePoint Saturday Atlanta 2015
PDF
JavaScript for NET Developers 1st Edition Ovais Mehboob Ahmed Khan
PPTX
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
Future-proof Development for Classic SharePoint
German introduction to sp framework
Power up your Project Sites - SPS New Hampshire 2015
Building Flexible SharePoint Solutions with AngularJS
Chris O'Brien - Introduction to the SharePoint Framework for developers
TypeScript for Java Developers
The advantage of developing with TypeScript
AngularConf2015
Client Object Model - SharePoint Extreme 2012
SharePoint and the User Interface with JavaScript
Download Complete JavaScript for NET Developers 1st Edition Ovais Mehboob Ahm...
User Interface Development with jQuery
SPUnite17 TypeScript for SharePoint Developers
Call for Action SharePoint Developers - Server Side is dead, long live the Cl...
SharePoint Framework 101 (SPFx)
SPUnite17 Building Great Client Side Web Parts with SPFx
Typescript 102 angular and type script
SharePoint Saturday Atlanta 2015
JavaScript for NET Developers 1st Edition Ovais Mehboob Ahmed Khan
SharePoint Saturday Lisbon 2017 - SharePoint Framework, Angular & Azure Funct...
Ad

More from Bob German (19)

PPTX
Introduction to the Microsoft Bot Framework v4
PPTX
Adaptive cards 101
PPTX
Introduction to Teams Development - North American Collaboration Summit
PPTX
Azure for SharePoint Developers - Workshop - Part 4: Bots
PPTX
Azure for SharePoint Developers - Workshop - Part 3: Web Services
PPTX
Azure for SharePoint Developers - Workshop - Part 2: Azure Functions
PPTX
Azure for SharePoint Developers - Workshop - Part 1: Azure AD
PPTX
Azure for SharePoint Developers - Workshop - Part 5: Logic Apps
PPTX
Azure AD for browser-based application developers
PPTX
Mastering Azure Functions
PPTX
Going with the Flow: Rationalizing the workflow options in SharePoint Online
PPTX
Modern SharePoint, the Good, the Bad, and the Ugly
PPTX
Developing JavaScript Widgets
PPTX
Introduction to TypeScript
PPTX
Developing JavaScript Widgets
PPTX
SPSNYC - Next Generation Portals
PPTX
Typescript 101 introduction
PPTX
Search First Migration - Using SharePoint 2013 Search for SharePoint 2010
PPTX
Enterprise Content Management + SharePoint 2013 - SPSNH
Introduction to the Microsoft Bot Framework v4
Adaptive cards 101
Introduction to Teams Development - North American Collaboration Summit
Azure for SharePoint Developers - Workshop - Part 4: Bots
Azure for SharePoint Developers - Workshop - Part 3: Web Services
Azure for SharePoint Developers - Workshop - Part 2: Azure Functions
Azure for SharePoint Developers - Workshop - Part 1: Azure AD
Azure for SharePoint Developers - Workshop - Part 5: Logic Apps
Azure AD for browser-based application developers
Mastering Azure Functions
Going with the Flow: Rationalizing the workflow options in SharePoint Online
Modern SharePoint, the Good, the Bad, and the Ugly
Developing JavaScript Widgets
Introduction to TypeScript
Developing JavaScript Widgets
SPSNYC - Next Generation Portals
Typescript 101 introduction
Search First Migration - Using SharePoint 2013 Search for SharePoint 2010
Enterprise Content Management + SharePoint 2013 - SPSNH

Recently uploaded (20)

PDF
Understanding Forklifts - TECH EHS Solution
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
AI in Product Development-omnex systems
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
L1 - Introduction to python Backend.pptx
PDF
System and Network Administration Chapter 2
PPT
Introduction Database Management System for Course Database
PDF
Softaken Excel to vCard Converter Software.pdf
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
System and Network Administraation Chapter 3
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Digital Strategies for Manufacturing Companies
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
Odoo Companies in India – Driving Business Transformation.pdf
Understanding Forklifts - TECH EHS Solution
Upgrade and Innovation Strategies for SAP ERP Customers
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
AI in Product Development-omnex systems
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Wondershare Filmora 15 Crack With Activation Key [2025
L1 - Introduction to python Backend.pptx
System and Network Administration Chapter 2
Introduction Database Management System for Course Database
Softaken Excel to vCard Converter Software.pdf
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Design an Analysis of Algorithms II-SECS-1021-03
VVF-Customer-Presentation2025-Ver1.9.pptx
System and Network Administraation Chapter 3
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Odoo POS Development Services by CandidRoot Solutions
Digital Strategies for Manufacturing Companies
How Creative Agencies Leverage Project Management Software.pdf
Odoo Companies in India – Driving Business Transformation.pdf

TypeScript and SharePoint Framework

  • 1. An Insight company Bob German Principal Architect Developing SharePoint Widgets in TypeScript
  • 2. Bob German Bob is a Principal Architect at BlueMetal, where he leads Office 365 and SharePoint development for enterprise customers. Cloud & Services Content & Collaboration Data & Analytics Devices & Mobility Strategy & Design An Insight company @Bob1German
  • 3. Agenda • The Road Ahead for SharePoint Development • About Widgets • About TypeScript • TypeScript Widgets Today • TypeScript Widgets in SharePoint Framework • Resources
  • 4. A Geological View of SharePoint ASP.NET WebForms ASP.NET AJAX, Scripting On Demand SharePoint Page Models XSLT Custom Actions (JavaScript) JSLink, Display Templates Add-in Model
  • 5. • A completely new SharePoint UI for Office 365 and SharePoint 2016 • New client-side page model • Modern and responsive – allows “mobile first” development for SharePoint • Phase in over time • Client-side web parts work on both classic and client-side pages (Check out O365 blogs to try the Canvas) • Mix classic and client-side pages in a SharePoint site SharePoint Framework: A Clean Slate
  • 6. Microsoft is modernizing SharePoint Over the next few years, Microsoft will change the entire SharePoint user experience to meet the needs of a modern, mobile workforce. Web Parts in O365 In preview now New Pages O365 SP2016 Feature Pack early 2017 Web Era Cloud and Device Era It’s like upgrading a car, one part at a time – while you’re driving it cross country!
  • 8. Too Many SharePoint Development Models! Farm Solutions Sandboxed Solutions Add-in Model Content Editor WP SharePoint Framework Q: What do they have in common? A: HTML and JavaScript
  • 9. Widgets to the rescue! • Commonly used on the Internet called ”Web Widgets”, ”Plugins”, ”Embeds”, etc. • It’s just a clever piece of HTML and Javascript that acts like a web part • Why not use the same pattern in SharePoint?
  • 10. Widgets to the rescue! One widget can be packaged many ways Add-in Model Content Editor WP SharePoint Framework Farm Solutions
  • 11. Widgets in Action: BlueMetal Intranet SharePoint Online using Light Branding and Widgets 1. My Clients & Projects List 2. News Feed 3. Tabbed New Hire and Anniversary Carousel 4. Tabbed Calendars/Discussions 5. Twitter Feed
  • 12. What makes a good widget? 1 ISOLATED – so they won’t interfere with other widgets or the rest of the page Can you run multiple copies of the widget on a page? 2 EFFICIENT – so they load quickly Does the page get noticeably slower as you add widgets? 3 SELF-CONTAINED – so they’re easy to reuse Does the widget work without special page elements such as element ID’s, scripts, and CSS references? 4 MODERN – so they’re easier to write and maintain Is the widget written in a modern JavaScript framework such as AngularJS or Knockout?
  • 13. Widget Wrangler • Small open source JavaScript Framework • No dependencies on any other scripts or frameworks • Works with popular JS frameworks (Angular, Knockout, jQuery, etc.) • Minimizes impact on the overall page when several instances are present <div> <div ng-controller="main as vm"> <h1>Hello{{vm.space()}}{{vm.name}}!</h1> Who should I say hello to? <input type="text" ng-model="vm.name" /> </div> <script type="text/javascript" src="pnp-ww.js“ ww-appName="HelloApp“ ww-appType="Angular“ ww-appScripts= '[{"src": “~/angular.min.js", "priority":0}, {"src": “~/script.js", "priority":1}]'> </script> </div> AngularJS Sample
  • 14. demo JavaScript Widgets http://bit.ly/ww-jq1 - jQuery widget http://bit.ly/ww-ng1 - Hello World widget in Angular http://bit.ly/ww-ng2 - Weather widget in Angular
  • 16. Why Typescript? 1. Static type checking catches errors earlier 2. Intellisense 3. Use ES6 features in ES3, ES5 (or at least get compatibility checking) 4. Class structure familiar to .NET programmers 5. Prepare for AngularJS 2.0 let x = 5; for (let x=1; x<10; x++) { console.log (‘x is ‘ + x.toString()); } console.log (‘In the end, x is ‘ + x.toString()); var x = -1; for (var x_1 = 1; x_1 < 10; x_1++) { console.log("x is " + x_1.toString()); } console.log("In the end, x is " + x.toString()); // -1
  • 17. Setup steps: • Install VS Code • Install Node (https://nodejs.org/en/download) • npm install –g typescript • Ensure no old versions of tsc are on your path; VS adds: C:Program Files (x86)Microsoft SDKsTypeScript1.0 • In VS Code create tsconfig.json in the root of your folder { "compilerOptions": { "target": "es5“, "sourceMap": true } } • Use Ctrl+Shift+B to build – first time click the error to define a default task runner Edit task runner and un-comment the 2nd example in the default • npm install –g http-server (In a command prompt, run http-server and browse to http://localhost:8080/) VS Code Environment
  • 18. Setup steps: • Install Visual Studio • For VS2012 or 2013, install TypeScript extension • Build and debug the usual way Visual Studio Environment
  • 19. (1) Type Annotations var myString: string = ‘Hello, world'; var myNum : number = 123; var myAny : any = "Hello"; myString = <number>myAny; var myDate: Date = new Date; var myElement: HTMLElement = document.getElementsByTagName('body')[0]; var myFunc : (x:number) => number = function(x:number) : number { return x+1; } var myPeople: {firstName: string, lastName: string}[] = [ { firstName: “Alice", lastName: “Grapes" }, { firstName: “Bob", lastName: “German" } ] Intrinsics Any and Casting Built-in objects Functions Complex Types
  • 20. (2) ES6 Compatibility var myFunc : (nx:number) => number = (n:number) => { return n+1; } let x:number = 1; if (true) { let x:number = 100; } if (x === 1) { alert ('It worked!') } var target: string = ‘world'; var greeting: string = `Hello, ${target}’; “Fat Arrow” function syntax Block scoped variables Template strings
  • 21. (3) Classes and Interfaces interface IPerson { getName(): string; } class Person implements IPerson { private firstName: string; private lastName: string; constructor (firstName: string, lastName:string) { this.firstName = firstName; this.lastName = lastName; } getName() { return this.firstName + " " + this.lastName; } } var me: IPerson = new Person("Bob", "German"); var result = me.getName(); Interface Class Usage
  • 22. (4) Typescript Definitions var oldStuff = oldStuff || {}; oldStuff.getMessage = function() { var time = (new Date()).getHours(); var message = "Good Day" if (time < 12) { message = "Good Morning" } else if (time <18) { message = "Good Afternoon" } else { message = "Good Evening" } return message; }; interface IMessageGiver { getMessage: () => string } declare var oldStuff: IMessageGiver; var result:string = oldStuff.getMessage(); document.getElementById('output').innerHTML = result; myCode.ts (TypeScript code wants to call legacy JavaScript) oldStuff.js (legacy JavaScript) oldStuff.d.ts (TypeScript Definition)
  • 23. demo Typescript Widgets Today • Provisioning with PowerShell (http://bit.ly/PSProvisioning) • SharePoint Site Classification Widget (http://bit.ly/TSMetadata) • Weather Widget (http://bit.ly/TSWeather)
  • 25. Project Folder /dest /sharepoint SP Framework Development Process Project Folder /src JavaScript Bundles .spapp Local workbench workbench.aspx in SharePoint Content Delivery Network SharePoint Client-side “App” Deplyed in SharePoint 1 2 3 @Bob1German
  • 27. Getting ready for the future… • Write web parts and forms for Classic SharePoint today for easy porting to SharePoint Framework • Start learning TypeScript and a modern “tool chain” (VS Code, Gulp, WebPack) • Download the SPFx Preview and give it a spin
  • 28. Resources Widget Wrangler • http://bit.ly/ww-github • http://bit.ly/ww-intro (includes links to widgets in Plunker) TypeScript Playground • http://bit.ly/TSPlayground SharePoint Framework • http://bit.ly/SPFxBlog Bob’s TS Code Samples • http://bit.ly/LearnTypeScript • http://bit.ly/TSWeather

Editor's Notes

  • #2: DEMOS - Plunker examples first - JSDev2 – TS Widget - JSDev – SPFx
  • #7: Start with a “Boxy but Good” Volvo 200 series Arrive in a new S90 sedan