【问题标题】:typescript undefined variable fundamental打字稿未定义变量基本
【发布时间】:2019-04-30 16:40:43
【问题描述】:

最近从 C# 迁移到 TypeScript。下面的代码工作正常,没有错误。但是我怀疑我还没有理解一些 TS 基础,因为我们只是定义接口并将它们像对象/类一样使用。声明在接口中定义的类型的变量然后将该变量分配给其自己的类型化对象的正确方法是什么。

let tempCompany = Company|undefined; 
// I get error if I remove undefined in above line.
// Company is an interface with many properties
tempCompany = this.someArrayOfCompanies.find(x => x.zipCode === 65432);
if (tempCompany !== undefined) { 
    // error if I do not do this if check in above line
    console.log(tempCompany.SalesFigure);
}

更新:基于以下反馈的可能答案。 对于像我这样从 .Net/C# 迁移到 TS 的新手来说,会出现混淆,因为在 C# 中,我们将接口命名为 IAnimal(),然后有一个名为 Dog 的类实现 IAnimal()。在 TS 中,我们有 Animal 接口(没有 I),它被命名为 TS intellisense 在 vs 代码中工作。另外,当您 api 进入 Angular 时,它会返回一个 Animal 类型的可观察列表。基本上 TS 比 JS 好,但仍然有所有这些疯狂的东西。

【问题讨论】:

    标签: javascript typescript tslint


    【解决方案1】:

    也许这个小例子会为你解决问题。

    interface Animal {
        legs: number;
    }
    
    var dog: Dog = { legs: 4 };
    
    type canine = typeof dog;
    

    【讨论】:

    • 腿 = 4 。如果 Animal 接口有很多属性,而不仅仅是一个叫 leg 呢?将变量初始化为虚拟值只是为了获取它的一个实例?
    • 您可以在接口中将变量设为可选,例如 interface Animal {legs:number,hasTail?:boolean}。您不必初始化 hasTail 变量,因为它是可选的。
    • 如果我没有类那样的方法,那么在 TS 中我可以选择创建接口或创建类。现在我需要一个这种类型的变量或实例。在我理解的课程中,new 会做到这一点。我没有意识到我们必须用接口做所有这些杂耍。
    • 然后使用类。接口适用于特殊场合,又名。 X 类可以继承接口 A、B 和 C 以及(X 类实现 A、B、C),然后 Y 类有一个函数“public doStuffWithB(_b: B)”,你可以传递任何实现 B 的类。如果你不需要像这样分割和分离功能,那么我只使用普通类来处理这些情况,没有接口。
    • 是的。我想我终于知道了。将更新我的问题。
    【解决方案2】:

    像这样定义一个公司类型的变量:

    let tempCompany: Company;
    

    分配对象,只要对象与界面对齐,您就可以使用:

    tempCompany = this.someArrayOfCompanies.find(x => x.zipCode === 65432);
    

    【讨论】:

    • 没有。我得到这个 [ts] 类型'公司| undefined' 不能分配给类型 'Company'。类型“未定义”不可分配给类型“公司”。如果我把 | (管道)未定义,因为我的问题错误消失了。
    • 那是你赋值的时候?控制台记录您尝试分配的值并查看它的外观...如果该值不符合界面,您将收到错误..
    • this.someArrayOfCompanies是什么类型?
    • 类型是公司 []
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2021-07-12
    • 2018-04-29
    相关资源
    最近更新 更多