【问题标题】:Typescript to use Javascript object使用 Javascript 对象的打字稿
【发布时间】:2018-03-06 13:14:11
【问题描述】:

我正在通过 Node.js 进行开发。 我在 Javascript 文件中有以下对象

function Person{
  this.name = 'Peter',
  this.lastname = 'Cesar',
  this.age = 23
}

我想在我的 Typescript 代码中实例化这个对象:

let peter: any = new Person();

但是我得到“找不到名称'Person'”这很正常,因为我需要在之前为函数定义签名。我怎样才能做到这一点?

【问题讨论】:

    标签: angularjs node.js typescript


    【解决方案1】:

    用这个代替人物功能

    export class Person {
      name:string = 'Peter';
      lastname:string = 'Cesar';
      age:number = 23
    }
    

    【讨论】:

    • 我想将它用作外部 JS ,如果我这样做意味着它已经是代码的一部分。我认为我需要做的是定义函数的签名,或者打字
    【解决方案2】:

    是的,我认为您需要做的是“声明”该功能。

    declare function Person(): void;
    

    您可以在官方文档中阅读“声明”。

    【讨论】:

      【解决方案3】:

      答案是@TomKunzemann 和@GauravSrivastava 的答案的混合:您应该将declare 它作为class

      使用declare,您只是告诉编译器该类型的形状和行为而不实现它,因此它依赖于您的 JavaScript 中包含的环境 Person 函数。

      对于class,您是在告诉 TypeScript,这是您使用 new 实例化的那种东西。

      最后,您可能不想将peter 定义为any 类型,否则TypeScript 之后不会对其进行类型检查。如果你不使用: any,TypeScript 会推断peterPerson 类型,它会执行所需的类型检查,例如检测拼写错误(例如,lastName 而不是lastname):

      declare class Person {
        name: string;
        lastname: string;
        age: number;
      }
      
      let peter = new Person(); // okay
      console.log(peter.name); // okay
      
      // note the typo below
      console.log(peter.lastName); // error!
      // "Property 'lastName' does not exist on type 'Person'. Did you mean 'lastname'"?
      

      希望有所帮助;祝你好运!

      【讨论】:

        【解决方案4】:

        所以首先我认为你的 vanilla javascript 语法是错误的,应该是

        function Person() {
          this.name = 'Peter';
          this.lastname = 'Cesar';
          this.age = 23;
        }
        

        然后在打字稿中你可以做

        declare var Person: any;
        let peter: any = new Person;
        let john: any = new Person;
        

        确保包含外部js,然后您可以拥有多个Person对象

        【讨论】:

        • 好工作就是我要找的,我只是想知道,为什么要声明函数 Person(): void; let peter: any = new Person() 不起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 2017-06-12
        • 2017-02-18
        • 1970-01-01
        相关资源
        最近更新 更多