在解构参数中键入默认参数

时间:2016-10-11 18:19:42

标签: typescript types typescript2.0

我最喜欢的es6功能之一是能够使用解构参数。 例如:

function example1({
    bar = -1,
    transform = Math.abs
} = {}) {
    transform(bar);
}

但是,当需要将显式类型分配给其中一个参数时,typescript编译器会生成错误(例如,为了给它提供比默认推断更大的灵活性):

type Formatter = { (n: number): (number | string) };

function example2({
    bar = -1,
    transform: Formatter = Math.abs 
} = {}) {
    // ERROR: cannot find name 'transform'
    return transform(bar) + ' is the value';
}

我发现的唯一方法就是明确输入整组参数 - 当推断出其余的参数类型时,这些参数似乎过于复杂:

type Formatter = { (n: number): (number | string) };
type ExampleOpts = {
    bar?: number,
    transform?: Formatter
};

function example3({
    bar = -1,
    transform= Math.abs 
}: ExampleOpts = {}) {
    return transform(bar) + ' is the value';
}

思考?是否有语法以#2的简单性完成了#3,我错过了?

1 个答案:

答案 0 :(得分:0)

type Formatter = { (n: number): (number | string) };

function example2({
    bar = -1,
    transform = Math.abs as Formatter 
} = {}) {
    // ERROR: cannot find name 'transform'
    return transform(bar) + ' is the value';
}

使用默认参数时,您的目标是进行类型推断。如果没有类型定义或者您想提供自己的类型定义,只需使用'变量类型'语法来构建它! :)