gpt4 book ai didi

javascript - 具有部分定义的对象类型 flowjs

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:00 25 4
gpt4 key购买 nike

假设我有一个函数:

const example = (item : ?{+type?: ?string}) : {+result: ?string} => {
const state = {}
state.result = item.result
return state
}

这无法进行类型检查:

 12:         state.result = item.result
^^^^^^^ property `result`. Property not found in
12: state.result = item.result
^^^^^^ object type

为什么不进行类型检查?我没有使用确切的对象类型符号 ?{|+type?: ?string|} 定义类型,所以它不应该允许额外的键吗?那么精确的对象表示法是如何工作的呢?我如何定义这样的部分对象类型?这可能吗?

最佳答案

听起来您正在尝试对参数 item 可以具有任何属性的类型进行编码。这听起来像一张 map ,Flow 对其进行编码:

{ [key: KeyType]: ValueType };

您的示例可以这样更新:

const example = (item : ?{[key: string]: string}) : {+result: ?string} => {
const state = {}
if(item)
{
state.result = item.result;
}
return state
}

请注意,您必须对 item 进行 null 检查,否则它将不会进行类型检查,因为您在函数签名中将其声明为可为 null。

如果item有某些必需的属性,那么您可以使用交集类型来添加该约束。我将为此创建一个新类型,以便更容易阅读签名:

type Item = {[key: string]: string} & {type: string}

const example = (item : ?Item) : {+result: ?string} => {
const state = {}
if(item)
{
state.result = item.result;
}
return state
}


example({type: 'blah', x: '2'}); // OK
example({'blah', x: '2'}); // Error: type is missing

关于javascript - 具有部分定义的对象类型 flowjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42195800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com