我不理解//The Application's onStart() method calls the local method displayNextImage()
//images is some collection that implements getNext() and isEmpty()
void displayNextImage() {
timeline = new Timeline();
KeyValue transparent = new KeyValue(imageView.opacityProperty(), 0.0);
KeyValue opaque = new KeyValue(imageView.opacityProperty(), 1.0);
KeyFrame startFadeIn = new KeyFrame(Duration.ZERO, e -> {imageView.setImage(images.getNext());}, transparent);
KeyFrame endFadeIn = new KeyFrame(Duration.millis(250), opaque);
KeyFrame startFadeOut = new KeyFrame(Duration.millis(750), opaque);
KeyFrame endFadeOut = new KeyFrame(Duration.millis(1000), e -> {imageView.setImage(null);}, transparent);
timeline.getKeyFrames().addAll(startFadeIn, endFadeIn, startFadeOut, endFadeOut);
timeline.setCycleCount(Animation.INDEFINITE);
timeline.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
if (!images.isEmpty()) {
displayNextImage();
}
}
});
timeline.play();
}
中'WHERE employees.department_id = departments.department_id'
字段的含义。在文档中我读过这样的文字:
types
据我所知,如果我安装tsconfig.json
,我应该在"types": {
"description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.",
"type": "array",
"items": {
"type": "string"
}
},
中添加此类字符串
@types/express
但没有它,一切正常。现在我不明白,为什么我需要tsconfig.json
字段
答案 0 :(得分:91)
从TypeScript 2开始。*&#39; tsconfig.json&#39;有以下两个属性:
{
'typeRoots': [],
'types': []
}
我按顺序详细说明。
&#39; typeRoots&#39;指定转换器应在其中查找类型定义的根文件夹(例如:&#39; node_modules&#39;)。
如果您一直在使用打字稿,您知道对于尚未使用打字稿编写的不同库,您需要定义,以便编译器识别全局变量并获得IntelliSense支持。
此问题已由项目(回购)解决,例如&#39; DefinatelyTyped&#39;使用 tsd 或 typings 模块等工具下载项目所需的类型,但它们也随附他们自己的&#39; json&#39;需要单独维护的文件。
使用TS2。*,您现在可以使用&#39; npm&#39;来获取定义依赖关系。因此,您现在可以使用:而不是使用单独的cli库,例如 tsd 或 typings 。
npm i @types/{LIB}
这样,所有依赖项都使用 package.json 进行管理,您可以轻松地消除另一个“json”的必要性。要在项目中维护的文件。
&#39;类型&#39;是typeRoot中的实际库名称。
所以让我们说你有typeRoots的默认配置,它看起来像:
"typeRoots": [
"./node_modules/@types"
]
让我们假设你现在想要使用jasmine作为项目的测试框架,所以你配置了 typeRoot 文件夹,你现在所做的就是执行: npm i @types/jasmine --save-dev
安装定义包后,您只需配置“&#39;类型&#39;属于&#39; tsconfig.json&#39;如下:
"types": [
"core-js",
"jasmine",
"requirejs",
"chance"
]
总而言之,基本上你告诉TS编译器:
typeRoots :您需要在这些文件夹中查找输入内容。 types :在上面提供的其中一个文件夹中,您可以找到这些framworks(子文件夹)的定义。
所以使用上面的场景,如果我们添加另一个根:
"typeRoots": [
"./node_modules/@types",
"./custom_definitions"
],
"types": [
"jasmine",
]
TS现在将在
中查找定义文件 ./node_modules/@types/jasmine
或
./custom_definitions/jasmine
希望这有帮助!
答案 1 :(得分:17)
您不一定需要类型字段。以下是documentation中需要注意的重要部分:
默认情况下,所有可见的“@types”包都包含在您的 汇编。任何封闭文件夹的node_modules / @类型中的包 被认为是可见的
因此,如果您遵循惯例或使用工具集(如npm)下载@types包,则不需要配置 typeRoots 或类型在您的配置中,因为它将使用默认文件夹结构开箱即用。
答案 2 :(得分:0)
除了其他答案外,还有些小的问题:tsconfig.json中的@types属性主要用于全局声明(无需import
ing模块即可使用的逻辑)。因此,import
不会限制您的类型。例如。您拥有以下软件包:node_modules/@types/foo
。并且您的@types
属性等于[bar]
。如果foo
是基于模块的逻辑,您会发现它仍然有效:
import {A, B, C} from 'foo'
请参阅TS文档:
请记住,仅当您使用带有全局声明的文件(而不是声明为模块的文件)时,自动包含才重要。例如,如果使用import“ foo”语句,TypeScript可能仍会遍历node_modules和node_modules / @ types文件夹来查找foo包。