gpt4 book ai didi

typescript - 为什么 typescript 提示对象必须是传播类型中的对象

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:53 24 4
gpt4 key购买 nike

为什么 TSC 说“...base”必须是一个对象,我该如何解决这个问题同时仍然保留“base”对象的类型。

function aFunction<T extends object>(base: T) {
const anObject = { test:"value" }
if (typeof base !== 'object') { return }

// the following line causes a TSC error, saying that spread types can only be
// created from object types and highlighting base as the problem... wut?

const merged = { ...base, anObject }
return merged
}

例如,以下没有编译器错误,但会丢失“base”的所有类型信息。

function aFunction(base: object) {
const anObject = { test:value }
if (typeof base !== 'object') { return }

const merged = { ...base, anObject }
return merged
}

最佳答案

<T extends object>(base: T)表示 base是泛型 T .

而且 TypeScript 的类型系统还不理解泛型类型。( #10727 )

解决方法:

  1. 重构您的代码以不使用 ...

  2. 等待#10727待解决。

  3. 换成其他类型的检查器,比如flow:

Flow 报告您的代码没有错误:

/* @flow */

function aFunction<T: Object>(base: T) {
const anObject = { test:"value" }
if (typeof base !== 'object') { return }

const merged = { ...base, anObject }
return merged
}

关于typescript - 为什么 typescript 提示对象必须是传播类型中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384697/

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