2017-08-27 4 views
1

は、それは、唯一のConfiguration[]...args: Configuration[]を受け入れることができwebpack-mergeは、最初のパラメータまたは要素の広がりとして一つだけのアレイと関数の宣言を記述する方法

smart(...configuration | [...configuration]) 

からこの機能を検討してConfigurationを返します。

この機能にはどのような種類がありますか?


UPDATE:

私はWebPACKのマージのためのタイピングを作りたいです。

これは私がこれまで持っているものである

...

declare module 'webpack-merge' { 

    import { Configuration } from 'webpack' 

    type StrategyType = 'prepend' | 'append' | 'replace' 
    type StrategyMap = { [feild: string]: StrategyType } 
    type ConfigurationFolder = (
    conf?: Configuration[], 
    ...args: Configuration[]) => Configuration 

    export const merge: ConfigurationFolder 
    export const multiple: ConfigurationFolder 
    export const smart: ConfigurationFolder 

    export const smartStrategy: (options: StrategyMap) => ConfigurationFolder 
    export const unique: ConfigurationFolder 

    export default merge 
} 

...しかし、予想通り、それはdoesntの仕事。私が欲しいもの

import * as webpackMerge from 'webpack-merge' 

const webpackConfig = webpackMerge.smartStrategy({ entry: 'replace' })(
    configs, 
    baseConfig 
    # must fail here: only one `Configuration[]` as first param, 
    # or only `Configuration, Configuration, Configuration, ....` 
) 

アップデート2

:ここ

はテストです

class Configuration { } 
type Func = (...configuration: Configuration[]) => Configuration; 

// usage 
const myFunc: Func = (...configuration: Configuration[]) => { 
    return new Configuration(); 
} 

const conf = new Configuration; 
const confs = [conf]; 

const r1 = myFunc(confs); // right 
const r2 = myFunc(conf); // right 
const r3 = myFunc(conf, conf); // right 

const f1 = myFunc(confs, confs); // must fail, cause can accept only one array 
const f2 = myFunc(conf, confs); // must fail, cause or array, or spread 
const f3 = myFunc(confs, conf); // must fail, same 

Here is a playable version of what I want.

UPDATE3

spin-off

+0

わかりませんでした。何をしたいですか? –

+0

@PronoyMukherjee Updated – bjornmelgaard

答えて

3

我々は

は、唯一のConfiguration[]...args: Configuration[]を受け入れ、ここでConfiguration

を返すことができます...機能を記述するためにfunction overloadingを使用することができます宣言です。

declare function smart(...configuration: Configuration[]): Configuration; 
declare function smart(configuration: Configuration[]): Configuration; 

ここはan example of its usageです。

// in the module's *.d.ts declaration file... 

declare class Configuration { 
    public context: any; 
    public entry: any; 
    public output: any; 
} 

declare function myFunc(...configuration: Configuration[]): Configuration; 
declare function myFunc(configuration: Configuration[]): Configuration; 

// in the module consumer's *.ts file... 

const conf = new Configuration(); 
const confs = [conf]; 

const r1 = myFunc(confs); // right 
const r2 = myFunc(conf); // right 
const r3 = myFunc(conf, conf); // right 

const f1 = myFunc(confs, confs); // must fail, cause can accept only one array 
const f2 = myFunc(conf, confs); // must fail, cause or array, or spread 
const f3 = myFunc(confs, conf); // must fail, same 
+0

lol、なぜ私が何を意味するのか分かりません))) – bjornmelgaard

+0

@bjornmelgaard 'merge.smart'関数の実際の署名がオブジェクトを受け入れるので、分かりにくいです:https://github.com /survivejs/webpack-merge/blob/6bf19b6eb376774beb8ff70a392a956eb7455da6/src/index.js#L34 –

+0

いいえ、それは '(... configuration | [... configuration])' https://www.npmjs.com/package/を受け入れます。 webpack-merge#スマートマージ – bjornmelgaard

関連する問題