对象 args 中的键写为 [someKey] 时出现 TS2345 错误

Posted

技术标签:

【中文标题】对象 args 中的键写为 [someKey] 时出现 TS2345 错误【英文标题】:TS2345 error when a key in object args is written like [someKey] 【发布时间】:2019-01-23 08:18:59 【问题描述】:

什么时候

function StyleMixin(base: React.CSSProperties) 




StyleMixin(
    fontWeight: 'bold',
    lineHeight: 1,
    textAlign: 'center',
    [someVariable]: 
        fontSize: '1rem',
    

[someVariable],它说

TS2345:类型参数 ' fontWeight: "bold";线高:数字; 文本对齐:“中心”; ...' 不是 可分配给“CSSProperties”类型的参数。对象字面量可能 仅指定已知属性,而 '[someVariable]' 不指定 存在于“CSSProperties”类型中。

如何解决这个问题?

【问题讨论】:

【参考方案1】:

如果someVariable 是不是React.CSSProperties 属性的字符串文字类型,则会发生这种情况

const someVariable = "nonExistentProperty";
StyleMixin(
    fontWeight: 'bold',
    lineHeight: 1,
    textAlign: 'center',
    [someVariable]: 
        fontSize: '1rem',
    
)

如果someVariable 是变量而不是常量(即用letvar 声明),它实际上会起作用。

我建议确保您确实要添加不在 CSSProperties 中的属性(如果您没有看到完整的错误消息,请在 tsconfig.json 中使用 "noErrorTruncation": true

如果你真的希望StyleMixin 是一个可以向CSSProperties 添加额外属性的对象,你可以在函数中使用泛型参数:

function StyleMixin< T extends React.CSSProperties>(base: T) 
const someVariable = "nonExistentProperty";
StyleMixin(
    fontWeight: 'bold',
    lineHeight: 1,
    textAlign: 'center',
    [someVariable]: 
        fontSize: '1rem',
    
)

【讨论】:

以上是关于对象 args 中的键写为 [someKey] 时出现 TS2345 错误的主要内容,如果未能解决你的问题,请参考以下文章

map集合中的键值对对象遍历

STL map 存储搜索到的键

mysql中的json数据类型

枚举Azure管道中的秘密变量

如何遍历对象数组并制作键值对?

序列化对象时如何强制杰克逊将数字写为字符串