我正在阅读TypeScript手册,并在函数类型标题下的Functions section中有这个例子(我理解):
ImageminPlugin
接下来是
让我们通过查看每个函数来写出函数的完整类型 功能类型的一部分。
和这句语法:
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ImageminPlugin = require('imagemin-webpack-plugin').default;
const path = require('path');
module.exports = {
context: path.resolve(__dirname, 'static'),
entry: ['./js/frontend.js','./sass/app.scss'],
output: {
path: path.join(__dirname, 'build/public'),
filename: 'js/frontend.js'
},
module: {
rules: [
{
test: /\.(sass|scss)$/,
loader: ExtractTextPlugin.extract({
use: [{
loader: 'css-loader',
options: {
sourceMap: true
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}]
})
}
]
},
plugins: [
new CleanWebpackPlugin('build/public'),
new ExtractTextPlugin({
filename: 'css/styles.css',
allChunks: true
}),
new CopyWebpackPlugin([
{
from: 'img', to: 'img'
}
]),
new ImageminPlugin({ test: /\.(jpe?g|png|gif|svg)$/i })
],
devtool: 'source-map'
};
有人可以打破这个并解释它,因为我以前从未见过这个并且在手册中找不到解释吗?
答案 0 :(得分:4)
这一行:
let myAdd: (x: number, y: number) => number =
function(x: number, y: number): number { return x+y; };
由3部分组成:
(1)变量声明,这部分是let myAdd
。我认为这里没有什么可以添加的,就像js一样。
(2)变量的类型:(x: number, y: number) => number
。
在这里,我们要定义一种函数类型,该函数需要两个类型number
,名为x
和y
的参数。
该函数需要返回number
。
(3)将值赋值给变量:= function(x: number, y: number): number { return x+y; }
除了为参数和返回值添加的类型之外,这也像javascript一样
如果你看一下它,你会发现实际的实现与声明的类型完全匹配。
您也可以这样写:
let myAdd: (x: number, y: number) => number = function(x, y) { return x+y; };
或者:
let myAdd: (x: number, y: number) => number = (x, y) => { return x+y; };
答案 1 :(得分:1)
第一行:
let myAdd: (x: number, y: number) => number
声明变量“myAdd”的类型。 Typescript可以在第一个例子中自动推断出来,或者(第二个例子显示)你可以隐式地告诉Typescript它应该期待什么。
第二行:
function(x: number, y: number): number { return x+y; };
指的是已分配给变量“myAdd”的函数本身的类型。
有一个更简单的例子来说明同样的事情:
let myString: (input: string) => string = (input: string) => input;
或者,隐式声明变量类型的另一个例子是:
let myNumber: number = 10;
以上两个都告诉Typescript变量应该是什么。