如果没有创建新的界面/类型,并且没有将我的类型定义中的所有字段都设为可选,我可以引用一个类型而不包括所有必需的字段吗?
以下是问题的一个示例:
interface Test {
one: string;
two: string;
}
_.findWhere<Test, Test>(TestCollection, {
one: 'name'
});
作为参考,Underscore的.findWhere
方法的类型定义是:
findWhere<T, U extends {}>(
list: _.List<T>,
properties: U): T;
我想使用T
作为属性参数的类型,因为它具有我想要的类型信息,但尝试这样做会导致此打字稿错误:
类型
'{ one: string; }'
的参数不能赋值给参数 输入'Test'
。类型'two'
中缺少属性'{ one: string; }'
。
是否有一些额外的语法可以让我根据需要有效地使one
和two
字段可选?如下所示:
_.findWhere<Test, Test?>(TestCollection, {
one: 'name'
});
我想要自动完成功能,并在我使用错误的类型信息时提醒我(e.x.字符串,当提供数字时)。
这种语言是否存在?在这种情况下我是否必须创建一个新类型?我是否需要将所有字段设为可选字段?
答案 0 :(得分:1)
TypeScript中尚不存在此功能。 This is the suggestion issue tracking it.
答案 1 :(得分:1)
根据线索,Ryan Cavanaugh分享说,最新的是这个功能已经添加,并将在不久的将来发布在未来的版本中(2.2.x
?)。
来自this comment,它将如下所示:
// Example from initial report
interface Foo {
simpleMember: number;
optionalMember?: string;
objectMember: X; // Where X is a inline object type, interface, or other object-like type
}
// This:
var foo: Partial<Foo>;
// Is equivalent to:
var foo: {simpleMember?: number, optionalMember?: string, objectMember?: X};
// Partial<T> in that PR is defined as this:
// Make all properties in T optional
interface Partial<T> {
[P in keyof T]?: T[P];
}
因此,您可以将MyType
设置为Partial<MyType>
,从而使类型成为不完整类型。