TypeScript - 访问接口的泛型类型信息还是生成代码来提供它?

时间:2015-11-25 14:44:35

标签: typescript

打字稿是否有一种机制允许我在下面的T中查询f<T>()的类型名称/属性? f()不需要T的实例来完成其工作,只需要有关T&#39的类型名称和形状的信息。

给出类似的东西:

interface Foo {
    bar:string
}

function f<T>() {
    // know about T here?
}

var x = f<Foo>() 

假设没有,是否有一种支持的方式(宏,预处理器,编译器插件等?)来生成代码以使其可见?

对于后台,我想要构建的是一个通用数据访问层,它从SQL数据库中提取数据,其中要检索的表名和列分别对应于类型名称和属性。

例如,get<User>(userid:number)可以粗略地创建SELECT name FROM User WHERE id = userid之类的查询,前提是User定义了name属性。

1 个答案:

答案 0 :(得分:0)

有两件事需要考虑......

  1. TypeScript使用的输入仅在开发时可用,而不是运行时
  2. 有一些结构可以让您更多地了解您的函数正在使用的泛型类型
  3. 实施例

    interface IBaseDataStructure {
      id: number;
      createDate: Date;
      [string]: any;
    }
    
    function insert<T extends IBaseDataStructure> (dataToSave: T) {
      // knows that dataToSave has id & createDate
      dataToSave.id = 1;
      dataToSave.createDate = new Date();
      buildSQL(dataToSave);
    }