打字稿,如何使用类作为参数的类型
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: ) => 的参数