如何使用不完整的类型

时间:2016-09-16 16:27:20

标签: typescript intellisense typescript-typings

如果没有创建新的界面/类型,并且没有将我的类型定义中的所有字段都设为可选,我可以引用一个类型而不包括所有必需的字段吗?

以下是问题的一个示例:

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; }'

是否有一些额外的语法可以让我根据需要有效地使onetwo字段可选?如下所示:

_.findWhere<Test, Test?>(TestCollection, {
    one: 'name'
});

我想要自动完成功能,并在我使用错误的类型信息时提醒我(e.x.字符串,当提供数字时)。

这种语言是否存在?在这种情况下我是否必须创建一个新类型?我是否需要将所有字段设为可选字段?

2 个答案:

答案 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>,从而使类型成为不完整类型。