gpt4 book ai didi

Typescript 泛型不适用于 Readonly

转载 作者:行者123 更新时间:2023-12-03 16:58:33 26 4
gpt4 key购买 nike

让我们在 TypeScript 中使用以下简化示例:

type Foo = { name: string } | undefined

function fooWorks<T extends Foo>(input: T) {
return input?.name // ok
}

function fooErrors<T extends Foo>(input: Readonly<T>) {
return input?.name // error
}
为什么 fooWorks有效,但 fooErrors才不是?

最佳答案

它给出了以下错误:

Property 'name' does not exist on type NonNullable.


问题是,TypeScript 编译器不理解此处细微的类型变窄并引发编译时错误,如 here 所述。 (不过,我不能 100% 确定这篇博文对您有多大帮助)。
删除 undefined来自 Foo作品:
type Foo = { name: string }

function fooWorks<T extends Foo>(input: T) {
return input?.name
}

function fooErrors<T extends Foo>(input: Readonly<T>) {
return input?.name
}
或者您可以添加 NonNullable 类型不包括 nullundefined来自 T ,结果是 input正在 { name: string } :
type Foo = { name: string } | undefined

function fooWorks<T extends Foo>(input: T) {
return input?.name
}

function fooErrors<T extends Foo>(input: Readonly<NonNullable<T>>) {
return input.name
}

关于Typescript 泛型不适用于 Readonly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64787649/

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