Typescript杂谈

Posted YAN-YAN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript杂谈相关的知识,希望对你有一定的参考价值。

在泛型约束中使用类型参数

可以声明一个类型参数,且它被另一个类型参数所约束。比如想要用属性名从对象中获取这个属性。且确保这个属性在对象上存在,需要在这两个类型之间使用约束。

function getProperty<T, K extends keyof T>(obj: T, key: K) 
  return obj[key];


let x = 
  a: 1,
  b: 2,
  c: 3,
  d: 4,
;
console.log(getProperty(x, "a"));
console.log(getProperty(x, "m")); 
//  Argument of type \'"m"\' is not assignable to parameter of type \'"a" | "b" | "c" | "d"\'. 

在泛型里使用类类型

function create<T>(c:  new (): T ): T 
  return new c();

一个更高级的例子,使用原型属性推断并约束构造函数与类实例的关系

class BeeKeeper 
  hasMask: boolean;

class ZooKeeper 
  nameTag: string;

class Animal 
  nemLegs: number;

class Bee extends Animal 
  keeper: BeeKeeper;

class Lion extends Animal 
  keeper: ZooKeeper;

function createInstance<A extends Animal>(c: new () => A): A 
  return new c();


createInstance(Lion).keeper.nameTag // typechecks
createInstance(Bee).keeper.hasMask // typechecks

以上是关于Typescript杂谈的主要内容,如果未能解决你的问题,请参考以下文章

typescript Angular最终版本的Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming

typescript Angular最终版本的Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming

typescript Angular最终版本的Angular 2测试片段。代码库https://developers.livechatinc.com/blog/category/programming

typescript 打字稿+角度1的启动片段

从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象

TypeScript: switch enum