-
Notifications
You must be signed in to change notification settings - Fork 229
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
278 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<meta charset="utf-8"> | ||
|
||
<title>Now Available: Effective TypeScript, Second Edition</title> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> | ||
<link href="/css/bootstrap.min.css" rel="stylesheet"> | ||
<link href="https://fonts.googleapis.com/css2?family=Khula:wght@600&family=Open+Sans:ital,wght@0,300;0,400;0,600;1,300;1,400;1,600&display=swap" rel="stylesheet"> | ||
<link href="/css/customize.css" rel="stylesheet"> | ||
<link href="/css/highlight.vs.css" rel="stylesheet"> | ||
<link rel="icon" type="image/png" href="/images/icon.png"> | ||
<meta name="description" content="Effective TypeScript: Now Available: Effective TypeScript, Second Edition"> | ||
<meta name="twitter:card" content="summary"> | ||
<meta name="twitter:creator" content="@danvdk"> | ||
<meta name="twitter:domain" content="effectivetypescript.com"> | ||
<meta name="twitter:title" content="Effective TypeScript › Now Available: Effective TypeScript, Second Edition"> | ||
<meta name="twitter:description" content="Fully updated, thoroughly revised, now with 50% more book!"> | ||
<meta name="twitter:img:src" content="https://effectivetypescript.com/images/cover-2e.jpg"> | ||
|
||
<meta property="og:title" content="Effective TypeScript › Now Available: Effective TypeScript, Second Edition"> | ||
<meta property="og:description" content="Fully updated, thoroughly revised, now with 50% more book!"> | ||
<meta property="og:image" content="https://effectivetypescript.com/images/cover-2e.jpg"> | ||
<meta property="og:url" content="https://effectivetypescript.com/"> | ||
|
||
<link href="https://effectivetypescript.com/atom.xml" type="application/atom+xml" rel="alternate" title="Effective TypeScript Atom Feed"> | ||
<meta name="generator" content="Hexo 5.4.0"></head> | ||
|
||
<!-- Google tag (gtag.js) --> | ||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-1NXE8EL9YT"></script> | ||
<script> | ||
window.dataLayer = window.dataLayer || []; | ||
function gtag(){dataLayer.push(arguments);} | ||
gtag('js', new Date()); | ||
|
||
gtag('config', 'G-1NXE8EL9YT'); | ||
var trackOutboundLink = function(category, url, e) { | ||
if (!window.google_tag_manager) { | ||
console.log('blocked!'); | ||
return true; // probably blocked | ||
} | ||
|
||
// No need to use event_callback if the link is opening in a new tab. | ||
var newTab = e && (e.metaKey || (e.currentTarget && e.currentTarget.target === '_blank')); | ||
gtag('event', 'click', { | ||
'event_category': category, | ||
'event_label': url, | ||
'transport_type': 'beacon', | ||
'event_callback': !newTab ? function() { | ||
document.location = url; | ||
} : undefined | ||
}); | ||
|
||
return newTab; | ||
} | ||
</script> | ||
|
||
<body class="post"> | ||
<div class="header"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-md-12"> | ||
<h1 class="site-title"> | ||
<a href="/"> | ||
Effective TypeScript | ||
</a> | ||
</h1> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
<section id="content" class="article content"> | ||
|
||
<div class="title-bar"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-md-12"> | ||
<h2>Now Available: Effective TypeScript, Second Edition</h2> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
<div class="page-content"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-md-12"> | ||
<div class="text-muted published-container"> | ||
<time class="published" datetime="2024-05-21T21:30:00.000Z" itemprop="datePublished"> | ||
Tue 21 May 2024 | ||
</time> | ||
</div> | ||
<div class="entry-content"> | ||
<p><img src="https://effectivetypescript.com/images/cover-2e.jpg" style="float: right">I'm happy to <a target="_blank" rel="noopener" href="https://twitter.com/danvdk/status/1788579805643915424" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://twitter.com/danvdk/status/1788579805643915424', event);">announce</a> that the second edition of <a target="_blank" rel="noopener" href="https://amzn.to/3UjPrsK" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://amzn.to/3UjPrsK', event);"><em>Effective TypeScript</em></a> is now available! I've spent a good chunk of the past year working on this update, and I'm incredibly happy with how it's turned out.</p> | ||
<p>You can buy a copy at all the usual places:</p> | ||
<ul> | ||
<li><a target="_blank" rel="noopener" href="https://amzn.to/3UjPrsK" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://amzn.to/3UjPrsK', event);">Amazon</a></li> | ||
<li><a target="_blank" rel="noopener" href="https://www.amazon.com/Effective-TypeScript-Dan-Vanderkam-ebook/dp/B0D2SGRTGR/" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://www.amazon.com/Effective-TypeScript-Dan-Vanderkam-ebook/dp/B0D2SGRTGR/', event);">Amazon eBook</a> (Kindle)</li> | ||
<li><a target="_blank" rel="noopener" href="https://www.ebooks.com/en-us/book/211331398/effective-typescript/dan-vanderkam/" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://www.ebooks.com/en-us/book/211331398/effective-typescript/dan-vanderkam/', event);">DRM-free eBook</a> (ebooks.com)</li> | ||
<li><a target="_blank" rel="noopener" href="https://www.oreilly.com/library/view/effective-typescript/9781098155056/" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://www.oreilly.com/library/view/effective-typescript/9781098155056/', event);">Read online</a> (O'Reilly)</li> | ||
</ul> | ||
<p>If you'd like to read it online, you can get a free month of access to the O'Reilly online platform using promo code <a target="_blank" rel="noopener" href="https://learning.oreilly.com/get-learning/?code=ETYPESCRIPT24" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://learning.oreilly.com/get-learning/?code=ETYPESCRIPT24', event);">ETYPESCRIPT24</a> (valid until the end of 2024).</p> | ||
<p>The book has been thoroughly revised and expanded to reflect how TypeScript is used in 2024. You can find full <a target="_blank" rel="noopener" href="https://github.com/danvk/effective-typescript/releases/tag/2.0.0" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://github.com/danvk/effective-typescript/releases/tag/2.0.0', event);">release notes</a> on the book's GitHub page, but here are the highlights:</p> | ||
<ul> | ||
<li>Two new chapters: one on Generics and Type-Level Programming and one on TypeScript Recipes</li> | ||
<li>24 new items (one item from the first edition was dropped)</li> | ||
<li>Coverage of new TypeScript features like template literal types and recursive type aliases.</li> | ||
</ul> | ||
<p>TypeScript has changed and grown since 2019 and so has <em>Effective TypeScript</em>: it's 50% thicker!</p> | ||
<img src="/images/ets-1v2.jpg"> | ||
|
||
<p>If you enjoyed the first edition or use it as a reference, you'll be happy to update to the second. If you haven't read it yet, now's the perfect time to <a target="_blank" rel="noopener" href="https://amzn.to/3UjPrsK" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://amzn.to/3UjPrsK', event);">pick up a copy</a>.</p> | ||
<p>If you'd like me to come give a talk at your company, please <a href="mailto:[email protected]">get in touch</a>. For a preview, check out the talk I gave at <a href="https://effectivetypescript.com/2024/01/31/etsy/">Etsy</a> in 2020.</p> | ||
|
||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
<div class="follow-or-subscribe"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-md-12"> | ||
Like this post? Consider subscribing to | ||
<a href="/mail/" onclick="return trackOutboundLink('subscribe newsletter', '/mail/', event);">my newsletter</a>, | ||
the <a href="/atom.xml" onclick="return trackOutboundLink('follow RSS', '/atom.xml', event);">RSS feed</a>, | ||
or <a target="_blank" rel="noopener" href="https://twitter.com/danvdk" onclick="return trackOutboundLink('follow on twitter', 'https://twitter.com/danvdk', event);">following me</a> | ||
on Twitter. | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
<div class="comments"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-md-12"> | ||
<script src="https://utteranc.es/client.js" repo="danvk/effective-typescript" issue-term="title" label="💬 blog comments" theme="github-light" crossorigin="anonymous" async> | ||
</script> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
<div class="promotion"> | ||
<div class="row"> | ||
<div class="col-sm-12 text-center"> | ||
<a target="_blank" rel="noopener" href="https://amzn.to/3UjPrsK" class="btn btn-info btn-lg primary" onclick="return trackOutboundLink('buy2e', 'https://amzn.to/3UjPrsK', event);">Buy 2nd Edition</a> | ||
<!-- | ||
<a target="_blank" rel="noopener" href="https://amzn.to/3HIrQN6" data-tag="post learn more hover" class="btn btn-info btn-lg primary">Buy the Book</a> | ||
<a target="_blank" rel="noopener" href="https://www.ebooks.com/en-us/209820951/effective-typescript/dan-vanderkam/?_c=1" data-tag="post learn more hover" class="btn btn-info btn-lg hidden-xs">Buy eBook</a> | ||
https://amzn.to/3UjPrsK | ||
--> | ||
<a href="/mail/" class="btn btn-info btn-lg" onclick="return trackOutboundLink('post learn more hover', '/mail/', event);">Subscribe</a> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
<div class="page-content"> | ||
<div class="container"> | ||
<div class="row"> | ||
<div class="col-md-12"> | ||
<a target="_blank" rel="noopener" href="https://amzn.to/3HIrQN6" onclick="return trackOutboundLink('post learn more cover image', 'https://amzn.to/3HIrQN6', event);"> | ||
<img src="/images/cover-2e.jpg" class="learn-more-photo" alt="Effective TypeScript Book Cover"> | ||
</a> | ||
<p><strong><em>Effective TypeScript</em></strong> shows you not just <em>how</em> to use TypeScript but how to use it <em>well</em>. The book's 62 items help you build mental models of how TypeScript and its ecosystem work, make you aware of pitfalls and traps to avoid, and guide you toward using TypeScript’s many capabilities in the most effective ways possible. Regardless of your level of TypeScript experience, you can learn something from this book.</p> | ||
<p>After reading <em>Effective TypeScript</em>, your relationship with the type system will be the most productive it's ever been! <a href="/">Learn more »</a></p> | ||
|
||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
|
||
</section> | ||
|
||
<footer id="contentinfo" class="footer"> | ||
<div class="container"> | ||
<address id="about" class="vcard body"> | ||
© 2019 - 2024 <a class="url fn" target="_blank" rel="noopener" href="https://danvk.org" onclick="trackOutboundLink('footer', 'https://danvk.org'); return false;">Dan Vanderkam</a> | ||
<div class="footer-attribution">Powered by <a href="https://hexo.io/" target="_blank" onclick="return trackOutboundLink('now available effective typescript second edition', 'https://hexo.io/', event);">Hexo</a></div> | ||
</address> | ||
</div> | ||
</footer> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters