有什么区别(如果有的话):
declare interface SomeInterface {
//members here
}
Run Code Online (Sandbox Code Playgroud)
和:
interface SomeInterface {
//members here
}
Run Code Online (Sandbox Code Playgroud)
?
我已阅读了几十页,试图找出在TypeScript中设置我的类型定义的最佳方法.
typings.ts在我的项目中的某个地方有一个文件,然后通过做类似的事情,在每个需要的文件中导入类型import {IMyCustomType} from './typings';
在我的打字文件中,我会声明我的类型:
export interface IMyCustomType {...}
models.d.ts一个types文件夹.而不是使用export interface IMyCustomType {..}他们declare interface IMyCustomType {..}
这个设置对我来说有一个很大的优势:我不需要在每个文件中显式导入类型,并且接口在整个项目中直接可用.
问题:
1)**/*.d.ts在编译期间是否会自动导入所有文件是否正确?
2)使用declare并使所有类型都可用于整个项目是一种好的做法吗?
3)是否有标准的目录路径和名称,我应该在哪里放置我的类型定义?
基本上我试图使我的全局接口在我的项目中随处可用,而不必明确地导入它们.这是我应该做的事情,我如何设置我的项目来实现这一目标?
UPDATE
在我的团队提出这个问题之后,大多数人反对使用环境类型,因此我们决定在需要时导入类型.为了使这更容易,我们依靠我们的IDE自动导入所述类型.
当我查看Backbone声明文件时,我看到了:
export class Router extends Events {
...
constructor (options?: RouterOptions);
initialize (options?: RouterOptions);
...
}
Run Code Online (Sandbox Code Playgroud)
以及其他类没有实现的方法定义的地方.我认为这种语法是为接口保留的.编译器允许它传入声明文件,但不传入我自己的ts文件.
.d.ts与.ts扩展的编译规则之间是否存在差异?如果是这样,这些类的类应该如何以不同的方式使用?
在 TypeScript 中,为什么有时需要使用declare来声明变量,有时不需要(同样的问题对于函数也是如此,......)?
举个例子:我什么时候(以及为什么)使用
declare var foo: number;
Run Code Online (Sandbox Code Playgroud)
如果
let foo: number;
Run Code Online (Sandbox Code Playgroud)
会做同样的事情(至少在我看来好像它做了同样的事情,即它们都声明了一个名为footype的变量number)。有什么不同?