Typescript声明文件的奇怪结果

时间:2018-05-14 08:31:05

标签: angular typescript

any.ts:

legend = (value) => {
    return typeof value === 'boolean' ?
        {
            'options.legend.display': value
        } :
        {
            'options.legned.display' : true,
            'options.legend.position': value
        };
};

}

any.d.ts

legend: (value: any) => {
    'options.legend.display': boolean;
    options.legned.display?: undefined;
    options.legend.position?: undefined;
} | {
    'options.legned.display': boolean;
    'options.legend.position': any;
    options.legend.display?: undefined;
};

* .d.ts文件发生错误

为什么编译器不使用引号?我使用了错误的语法?

以下代码工作正常:(

any.d.ts(由我自己编辑)

legend: (value: any) => {
    'options.legend.display': boolean;
    'options.legned.display'?: undefined;
    'options.legend.position'?: undefined;
} | {
    'options.legned.display': boolean;
    'options.legend.position': any;
    'options.legend.display'?: undefined;
};

1 个答案:

答案 0 :(得分:0)

如果在属性名称中使用点,则必须将它们用作字符串并使用方括号表示法访问它们,而不是dod表示法。

为什么,你问?

好吧,举个例子,你有一个legend对象,其属性为options.legend.display。现在假设您添加了另一个名为options的属性,另一个名为legend。所以,当你写这个:

legend.options.legend.display = '';

你在设置什么属性?这不是含糊不清的,因此,通过编写本文,您告诉您要在对象的属性display中的属性legend处设置对象的属性optionslegend

如果要使用点访问该属性,则需要编写:

legend['options.legend.display'] = '';

如果要使用方括号表示法访问嵌套属性:

legend['options']['legend']['display'] = '';

知道了吗?