typescript - 如何避免在扩展函数或数组的类型上出现缺少属性 TypeScript 错误

标签 typescript

当我定义一个从函数或数组扩展的接口(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/

相关文章:

internet-explorer - Visual Studio 因 TypeScriptDebugEngine System.IndexOutOfRangeException 而崩溃

html - Angular 5 下拉框中的下拉列表消失

javascript - 使用三元表达式在两个字符串值之间切换的正确方法

Angular 2.0 和 Http 请求。类型转换物体。类型转换错误

typescript - 类型 'ApolloServer' 的参数不可分配给类型 'ApolloServerBase' 的参数

javascript - Angular 形式返回错误 TypeError : "_co.service.formData is undefined"?

angular - RxJS -BehaviorSubject,onComplete 未调用

javascript - 将带有 Promise 的函数从 JS 转换为 TS 时出现问题

typescript - 在 deno 中使用 mapbox-gl

node.js - typescript 。不在特定机器上编译