2017-09-29 5 views
1

자바 스크립트와 타이프 스크립트를 혼합 한 프로젝트를 사용하고 있습니다. - declare 모듈을 사용하여 모듈 용 선언 파일을 쉽게 만들 수 있습니다. 하지만 어떻게 내 현재 폴더에 자바 스크립트 파일에 대한 선언을 만들 수 있습니까? 예를 들어자바 스크립트 파일에 대한 Typescript 선언

-

player.js - 
var Player = function() {}; 
Player.prototype.validate = function() {}; 

어떻게 타이프에서 확장 할 수 있도록 내가 선언을 만듭니 까. 나는 이런 일을하고 싶지 -

player.ts - 
let Player = require('./player'); 
Player.prototype.login = function() { 
    this.validate(); 
} 

나는 위의 코드는 어떤으로 플레이어 유형을 설정하여 작동합니다 알고 있지만 나는 수표를 입력 할 수 없습니다.

답변

1

타이프는 프로토 타입 구문/생성자 함수를 이해하지 못하는 자동 완성이 로그인을 지금 확인 : 더 인텔리가 없을 것입니다. 그것은 ES6 수업을 선호합니다.

자바 스크립트 Player 생성자 함수이 타이프 라이터 클래스 정의하는 것과 같습니다

  1. 더 많은 타이프 :

    다음
    // -- player.d.ts -- 
    declare class Player { 
        validate(): void; 
    } 
    

    에서, Player 클래스에 메서드를 추가 할 수있는 옵션 몇 가지있다 관용적 인 방법 : 클래스 상속 또는 클래스 구성

  2. TypeScript에서 프로토 타입 구문을 계속 사용하면서도 인텔리 센스를 얻는 절충안 : facade interf 에이스

코드 예제 :

// -- authenticated-player.ts -- 
import { Player } from './player'; 

// Option #1a: class inheritance 
class AuthenticablePlayer extends Player { 
    login() { 
    this.validate(); 
    } 
} 

const p1a = new AuthenticablePlayer(); 
p1a.login(); 

// Option #1b: class composition + delegation 
class AuthenticablePlayerB { 
    private player = new Player(); 

    login() { 
    this.validate(); 
    } 

    validate() { 
    this.player.validate(); 
    } 
} 

const p1b = new AuthenticablePlayerB(); 
p1b.login(); 

-

// Option #2: prototype extension + facade interface + type assertion 
const Player: any = require('./player'); 

Player.prototype.login = function() { 
    this.validate(); 
} 

interface IPlayer { 
    login(): void; 
    validate(): void; 
} 

function createPlayer(): IPlayer { 
    return new Player(); 
} 

const p2 = createPlayer(); 
p2.login(); 
+0

'declare class'와'interface'의 차이점에 대한 자세한 내용은 http://stackoverflow.com/a/14348084/1704166 –

+0

을 참조하십시오. 확장하지 않고 현재 클래스에 추가하는 방법이 있기를 바랬습니다. 그러나 나는 내가 연장해야 할 것 같아. – Nishant

0

TypeScript 파일에 인터페이스를 만들고 Player 유형으로 설정할 수 있습니다. TS 프로젝트에 사용

interface IPlayer { 
 
    validate(); 
 
} 
 

 
let Player: IPlayer = require('./player'); 
 

 
Player.prototype.login = function() { 
 
    this.validate(); 
 
}

+0

오류 TS2339 : 부동산의 '프로토 타입'타입 'IUSER'에 존재하지 않습니다. – Nishant

0

여기 Sabbir의 대답을 확장하기 위해 (의견의 충분한 공간)

interface IPlayer { 
    validate(): void 
    login():void 
} 

된 JS 코드

var Player = function() { } 
Player.prototype.validate = function() {} 

// import/require here, left out for brevity 
Player.prototype.login = function() { 
    this.validate() 
} 

선수 생성 -

let p: IPlayer = new Player() 
p.login() 
p.validate() 
+0

하지만 자동 완성 기능은 플레이어 함수 내에서 작동하지 않습니다. – Nishant

+0

정확한 프로젝트 사용 사례를 모르지만 개인적으로 Typescript 클래스를 만들고 JS 메서드를 복사하는 것이 좋습니다. 그런 다음 전체 코드 완성을 얻습니다. – Kokodoko

+0

편집을 확인하십시오. 정말 큰 클래스이고 자바 스크립트와 타이프 스크립트 코드를 혼합하고 싶지는 않습니다. – Nishant