打字稿,如何使用类作为参数的类型

Posted

技术标签:

【中文标题】打字稿,如何使用类作为参数的类型【英文标题】:Typescript, how to use class as type for an argument 【发布时间】:2016-06-18 16:04:29 【问题描述】:

我正在尝试了解打字稿的工作原理。 我有类文件,例如:

export class Aclass 


另外一个文件里还有另一个类:

export class Bclass 

    constructor(private a:Aclass) 

    

这给出了关于未解析类型的错误。 这样做的正确方法是什么?

更新:有没有办法避免在所有文件中导入?

【问题讨论】:

你也需要在你的 Bclass 文件中导入它。在 es6 模块上查看此链接。 exploringjs.com/es6/ch_modules.html 所以我需要一直在所有文件中导入?还有其他方法吗? 好的,但是如果我用接口制作模块呢?它实际上是我需要的。但在这种情况下,我不明白如何导入类以在角度中使用它。 我的意思是这样导出接口 IMessagesService 扩展 MessagesService 我不确定你的意思.. 你可以导出任何你想要的东西.. 也可以导入它。如果您对特定问题有疑问,请也针对该问题提出问题。 :) 【参考方案1】:

您需要将 Aclass 导入到 Bclass 文件中,如下所示:

///Bclass.js
import Aclass = require('./Aclass.js') //require should be relative path to Aclass from Bclass

export class Bclass 

    constructor(private a:Aclass) 

    

请参阅 TypeScript 文档的“走向外部”部分:http://www.typescriptlang.org/Handbook

【讨论】:

【参考方案2】:

您可以使用命名空间,也就是内部模块。每个命名空间都会创建一个全局变量,所以我不推荐它。使用导出和导入的外部模块是更好的方法。如果必须使用命名空间:

file1.ts:

namespace main 
    export class First
    name: string;
  

file2.ts

namespace main 
  class Two 
    second: First;

    constructor() 
      this.second = new First();
      this.second.name = 'second name';
    
  

【讨论】:

以上是关于打字稿,如何使用类作为参数的类型的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中将枚举类型作为参数传递

自动生成函数的类型安全包装,然后仅使用 `__typename` 作为参数动态调用。打字稿

打字稿:如何键入 Ramda R.prop(key) T' 不可分配给类型为 '(s: ) => 的参数

如何使用第三方库提供的类型? (打字稿,Element-UI)

如何在打字稿的泛型类中创建类型为“T”的新对象?

打字稿:如何制作接受对象的类型,其键匹配通用但所有值都是值参数的映射函数