TypeScript Partial 类型,未定义

问题描述 投票:12回答:2

如何创建-Partial<T>类型,不允许使用undefined值?这里是一个例子:

interface MyType { foo: string bar?: number } const merge = (value1: MyType, value2: KindaPartial<MyType>): MyType => { return {...value1, ...value2}; } const value = { foo: 'foo', bar: 42 } merge(value, {}); // should work merge(value, { foo: 'bar' }); // should work merge(value, { bar: undefined }); // should work merge(value, { bar: 666 }); // should work merge(value, { foo: '', bar: undefined }); // should work merge(value, { foo: '', bar: 666 }); // should work // now the problematic case: merge(value, { foo: undefined }); // this should throw an error // because MyType["foo"] is of type string

我正在寻找的类型应该:

    仅接受通用类型上存在的键(就像普通的Partial<T>一样]
  • 接受通用类型的键的子集
  • 但是
  • 如果通用类型对该键不接受undefined,则不接受undefined这可能吗?


编辑:我还在TypeScript存储库中创建了一个问题,因为这很奇怪,并且在某些时候会引发错误:https://github.com/Microsoft/TypeScript/issues/29701

如何创建kinda-Partial

类型,不允许使用未定义的值?这是一个示例:interface MyType {foo:string bar ?: number} const merge =(value1:MyType,value2:...

typescript generics partial
2个回答
16
投票
这是known limitation,TypeScript不能正确区分对象对象的属性(和函数参数),对象属性(和函数参数)是[[missing
© www.soinside.com 2019 - 2024. All rights reserved.