在 Record<string, string> 中创建新属性表示可以未定义新值

Posted

技术标签:

【中文标题】在 Record<string, string> 中创建新属性表示可以未定义新值【英文标题】:Creating new property in Record<string, string> says that new value can be undefined 【发布时间】:2020-11-16 01:06:09 【问题描述】:

我升级到 typescript 4-beta 并且我的减速器使用 Record 键入我的状态,这表明当我在其中创建具有值的新属性时,该值可能是未定义的。 我不知道我是否真的了解发生了什么,或者这是某种错误。 在 3.9 版上,没有出现这种错误。

Type ' [x: string]: string | undefined; ' is not assignable to type 'Record<string, string>'. Index signatures are incompatible. Type 'string | undefined' is not assignable to type 'string'. Type 'undefined' is not assignable to type 'string'.

这是带有示例的 TS 游乐场。

type State = Record<string, string>

const initialState = ;

const reducer = (state: State = initialState, action: type: string; payload: key: string, value: string):State => 
    switch(action.type) 
        case "foo":
            return 
                ...state,
                [action.payload.key]: action.payload.value
            
        default:
            return state;
    

playground link

非常感谢,也许我只是愚蠢,我做错了什么。

【问题讨论】:

【参考方案1】:

这是一个已知问题 (microsoft/TypeScript#39494),并且已在当前的 TypeScript 4.0 夜间版本中得到修复(请参阅 playground link)。因此,当 TS 4.0 正式发布时,这可能不会成为问题。希望有帮助;祝你好运!

【讨论】:

谢谢。我找不到这个问题。

以上是关于在 Record<string, string> 中创建新属性表示可以未定义新值的主要内容,如果未能解决你的问题,请参考以下文章

我有一个 map<string, vector<record>>,如何从 vector<record> 中删除记录?

为啥类型 `Record<string,unknown>` 不接受具有已定义键的对象作为值

React Navigation + TypeScript 错误:类型“EventStackParams”不满足约束“Record<string, object |未定义>'

为 Typescript Record 定义可选键列表

TypeScript“记录”未定义

在对象中输入 svg 元素做出反应