Bra*_*don 7 enums amd requirejs typescript visual-studio-2013
我正在使用安装了更新4和Typescript 1.3的Visual Studio 2013.
如果我有一个打字稿文件,如下所示:
MyEnums.ts:
export = MyEnumModule;
module MyEnumModule {
export enum AnEnum { RED, BLUE, GREEN }
}
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的定义文件:
MyDefinitions.d.ts:
declare module MyDefinitions {
interface ISomeInterface {
aProperty: string;
aMethod: () => void;
aColor: MyEnumModule.AnEnum;
}
}
Run Code Online (Sandbox Code Playgroud)
我基本上得到一个错误"找不到名字'MyEnumModule'"
从typescript文件引用时,此枚举文件可正常工作.例如:
SomeCode.ts:
export = MyCode;
import MyEnums = require('MyEnums');
module MyCode{
export class MyClass implements ISomeInterface {
public aColor: MyEnums.AnEnum = MyEnums.AnEnum.RED;
...and so on
Run Code Online (Sandbox Code Playgroud)
我的理解是添加/// <reference...或导入将不适用于.d.ts文件(我试图确保它看起来无论如何都不起作用).
有谁知道如何在这样的定义文件中引用枚举?
提前致谢.
--update:
这是我在尝试下面的Steve Fenton建议后看到的错误(我刚刚制作了一个示例项目).
MyDefinitions.ts:
import MyEnumModule = require('../App/MyEnums');
declare module MyDefinitions {
interface ISomeInterface {
aProperty: string;
aMethod: () => void;
aColor: MyEnumModule.AnEnum;
}
}
Run Code Online (Sandbox Code Playgroud)
MyEnums.ts:
export = MyEnumModule;
module MyEnumModule {
export enum AnEnum { RED, BLUE, GREEN }
}
Run Code Online (Sandbox Code Playgroud)
MyClass.ts:
export = MyCode;
import MyImport = require('MyEnums');
module MyCode {
export class MyClass implements MyDefinitions.ISomeInterface {
public aColor: MyImport.AnEnum = MyImport.AnEnum.RED;
constructor() { }
aProperty: string = "";
aMethod: () => void = null;
}
Run Code Online (Sandbox Code Playgroud)
}
文件夹结构:
App
在MyClass.ts内部MyDefinitions.ISomeInterface以红色下划线,并带有悬停警告"无法找到名称MyDefinitions".
我有AMD为该项目设置
我对此进行了检查,并且以下定义对我有用,尽管我必须承认我从未从“定义”代码中引用过“实际”代码 - 但我想不出任何不这样做的理由。
import MyEnumModule = require('MyEnumModule');
declare module MyDefinitions {
interface ISomeInterface {
aProperty: string;
aMethod: () => void;
aColor: MyEnumModule.AnEnum;
}
}
Run Code Online (Sandbox Code Playgroud)
关于混合定义和实际实现......
TypeScript 中的类型系统是一个设计时和编译时工具。当类型信息在设计时构造时,无论类型信息是从实现代码推断、从装饰实现的注释获取还是来自环境声明,都没有区别。
有许多混合实现代码和环境声明的用例 - 如果您要将一百万行 JavaScript 程序迁移到 TypeScript,您可能无法将其从最底层的依赖项向上迁移。此外,您可以将环境声明放置在普通文件中 - 不仅仅是定义文件 - 如果您有一个大型程序,您甚至可能不知道放置在环境声明中的类型是“真实的”还是“环境的”。
实现代码类型和环境声明类型之间的唯一区别在于,类型信息紧邻实际代码文件中的实现,以及环境声明的单独文件。
所以...如果您在环境声明中使用实际实现的类型时遇到问题,很可能是由可以修复的问题引起的。我上面提供的示例适用于 Visual Studio 2013 Update 4 中的一个项目 - 使用 TypeScript 构建配置集来编译 AMD 模块。如果您可以分享问题的具体细节,我很乐意帮助您解决问题。
话虽如此,如果您要为少量代码创建类型定义,将它们粘贴到文件中.ts甚至可能比编写定义更快,因此您应该根据具体情况决定在哪里花费精力。
| 归档时间: |
|
| 查看次数: |
6484 次 |
| 最近记录: |