gpt4 book ai didi

typescript :确保对象文字扩展接口(interface)但返回真实的对象类型

转载 作者:行者123 更新时间:2023-12-04 12:39:25 25 4
gpt4 key购买 nike

我正在尝试在 typescript 中创建一个函数,该函数返回一个必须扩展给定接口(interface)的对象,但我希望该函数返回所创建对象的真实类型。
原因是函数中的对象将来可能会发生变化,我想确保它始终具有界面中所需的最少 Prop 。

例子:

interface MustExtend {
a: string;
}

function myFunc() {
// I want to enforce res to extend type MustExtend
// right now it can be of type {something: 3} and compiler will allow it
const res = {a: 'hello', b: 2}
return res;
}

const c = myFunc(); // c should be of type {a: string, b: number}, or the more concrete type generated by method

编辑:

我会尽力澄清我的问题。我希望从返回的对象中推断出函数的结果类型,而不指定 res 的类型,因为它是由许多计算生成的:

interface MustExtend {
a: string;
}

function myFunc() {
// i want to enforce res to extend type MustExtend
// right now it can be of type {something: 3} (no 'a' at all)
// and i want to make sure it exists
const res = {
a: 'hello',
b: 2,
// a million more properties here that can change over time
}
return res;
}

const c = myFunc(); // c should be of type {a: string, b: number, ...other props}

最佳答案

经过一番修修补补,我找到了方法:

interface MustExtend {
a: string;
}

function myFunc(): typeof res extends MustExtend ? typeof res : never {
// i want to enforce res to extend type MustExtend
// right now it can be of type {something: 3} (no 'a' at all)
// and i want to make sure it exists
const res = {
a: 'hello',
b: 2,
// a million more properties here that can change over time
}
return res;
}

const c = myFunc(); // c should be of type {a: string, b: number, ...other props}

显然 typescript 可以在编译时在方法中获取对象的类型并在方法类型中使用它。以这种方式使用它我不必指定 res 的类型提前并确保它具有界面中的所有属性

关于 typescript :确保对象文字扩展接口(interface)但返回真实的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60931022/

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