微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐