首页 > 解决方案 > 如何在嵌套对象字段上使用三元运算符来验证我的打字稿类型

问题描述

我在这里做错了什么还是设计使然?

我希望能够写出这样的东西。

type MyType = {
    greeting: string;
    value?: { valueType: string; value?: string };
};

function generate(name: string, input?: Partial<MyType['value']>): MyType {
    return {
        greeting: `Hello, ${name}`,
        value: input?.valueType ? input : undefined,
    };
}

如您所见,我使用三元运算符来验证我的input对象是否有效,但 TypeScript 抱怨并给出错误:

类型“未定义”不可分配给类型“字符串”。(2322)


TypeScript Playground 示例

标签: typescripttypescript-typings

解决方案


如果您重新定义对象属性,Typescript 缩小会按预期工作。工作示例:

代码 :

type MyType = {
    greeting: string;
    value?: { valueType: string; value?: string };
};

function generate(name: string, input?: MyType['value']): MyType {
    return {
       greeting: `Hello, ${name}`,
       value: input?.valueType ?  {
            valueType: input.valueType,
            value: input.value
        } : undefined,
    };
}

@参见https://github.com/microsoft/TypeScript/issues/29827


推荐阅读