当我定义一个从函数或数组扩展的接口(interface)时,我还没有找到一种方法来正确地创建新实例而不会出现错误或使用 any
转换。
有没有一种方法可以初始化这些成员而不用回过头来?
函数示例:
interface Foo {
bar: any;
(): void;
}
// how to create a Foo?
var foo: Foo;
foo = () => {}; // cannot convert type ... has non-optional property bar which is not present
foo.bar = "initialized!";
数组示例:
interface Foo<T> extends Array<T> {
bar: any;
}
// how to create a Foo?
var foo: Foo<any>;
foo = []; // cannot convert type ... has non-optional property bar which is not present
foo.bar = "initialized!";
最佳答案
也许您正在寻找可选运算符
interface Foo<T> extends Array<T> {
bar?: any;
}
var foo: Foo<any>;
foo = []; // No error
放置 ?
在属性名称之后但在 :
之前使属性可选。这意味着该属性不一定存在但可以存在。
更新
如果您确实希望合约要求该属性,那么您将需要转换它。这是因为 TypeScript 要求所有使用文字( []
或 {}
)实例化的对象包含所有必需的成员。在不包含必需属性的情况下实例化此 的正确方法是使用强制转换。 foo = <any>[];
或 foo = <Foo><any>[];
关于typescript - 如何避免在扩展函数或数组的类型上出现缺少属性 TypeScript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35247315/