码迷,mamicode.com
首页 > 其他好文 > 详细

[TypeScript] Using Assertion to Convert Types in TypeScript

时间:2016-10-14 21:00:36      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

Sometimes the compiler needs help figuring out a type. In this lesson we learn how to help out the compiler with Typescript type assertion.

 

We have a SuperHero and a BadGuy. Let‘s make a function that saves the day if the function‘s argument is a SuperHero, and a commits a bad deed if its argument is a BadGuy. Our function needs to accept something that could be a SuperHero or a BadGuy.

interface SuperHero {
  powers: string[];
  savesTheDay: () => void;
}

interface BadGuy {
  badDeeds: string[];
  getRandomBadDeed: () => string;
  commitBadDeed: () => void;
}

function saveDayOrBadDeed(something: SuperHero | BadGuy) {
  if (something.powers) {}
}

The IDE is telling us something‘s wrong. 

assertion.ts(24,19): error TS2339: Poperty powers does not exist on type SuperHero | BadGuy.

This is because the compiler is evaluating both types of the union-type argument. Since the BadGuy doesn‘t have powers, something doesn‘t have powers. We can get a hold of the SuperHero‘s power‘s property by asserting that something is a SuperHero.

 

An assertion is how we told the compiler, "We have some information about something‘s type that it doesn‘t." There are two different syntaxes for assertion. We‘re using the as type syntax, which goes behind the value. We‘re putting something in parens in order to isolate it from its property. If we remove the parens we can‘t make the assertion.

function saveDayOrBadDeed(something: SuperHero | BadGuy) {
  if ((something as SuperHero).powers) {}
}

//or 

if (<SuperHero>something.powers) {} // angle bracket syntax, doesn‘t work with JSX

 

function saveDayOrBadDeed(something: SuperHero | BadGuy) {
  if ((something as SuperHero).powers) {
    (something as SuperHero).savesTheDay();
  } else {
    (something as BadGuy).commitBadDeed();
  }
}

saveDayOrBadDeed(dazzler); // Dazzler transduces sonic vibrations into light to save the day!!!
saveDayOrBadDeed(badGuy); // BadGuy farts on old folks

 

[TypeScript] Using Assertion to Convert Types in TypeScript

标签:

原文地址:http://www.cnblogs.com/Answer1215/p/5961916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!