program story

TypeScript의 개인 "함수"

inputbox 2020. 11. 2. 07:57
반응형

TypeScript의 개인 "함수"


TypeScript 클래스 내에서 개인 "함수"(메서드)를 만들 수 있습니까? 다음 Person.tsTypeScript 파일 이 있다고 가정 해 보겠습니다 .

class Person {
    constructor(public firstName: string, public lastName: string) {
    }

    public shout(phrase: string) {
        alert(phrase);
    }

    private whisper(phrase: string) {
        console.log(phrase);
    }
}

컴파일되면 다음으로 변환됩니다.

var Person = (function () {
    function Person(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    Person.prototype.shout = function (phrase) {
        alert(phrase);
    };
    Person.prototype.whisper = function (phrase) {
        console.log(phrase);
    };
    return Person;
})();

관찰

whisper함수가 클로저 내에서 선언 될 것으로 예상 했지만 프로토 타입에서는 선언되지 않았습니까? 본질적으로 이것은 whisper컴파일 될 때 함수를 공개합니까?


TypeScript public / private 키워드는 TypeScript가 코드를 확인하는 방식에만 적용되며 JavaScript 출력에는 영향을주지 않습니다.

에 따르면 언어 사양 (쪽 9-10.)

비공개 가시성은 디자인 타임 구조입니다. 정적 유형 검사 중에 적용되지만 런타임 적용을 의미하지는 않습니다. ... TypeScript는 디자인 타임에 클래스의 구현 캡슐화를 적용하지만 (개인 멤버의 사용을 제한하여) 런타임에 모든 객체 속성에 액세스 할 수 있으므로 런타임에 캡슐화를 적용 할 수 없습니다. 향후 버전의 JavaScript는 비공개 멤버의 런타임 적용을 가능하게하는 비공개 이름을 제공 할 수 있습니다.

이것은 이미 여기에서 요청되고 답변되었습니다 : https://stackoverflow.com/a/12713869/1014822

업데이트 : 이 오래된 답변은 여전히 ​​많은 양의 트래픽을 얻으므로 위의 언어 사양 링크 외에도 public, private 및 (현재) 보호 된 구성원은 클래스 에 대한 TypeScript 핸드북에서 자세히 다룹니다.

2018 업데이트 ES 개인 필드의 구현은 이제 타이프의 미래 항목입니다 할일 : 개발 예정표 하지만 토론 이 병렬 하드 전용 옵션이 아니라 현재의 소프트 개인 구현을 대체합니다 제안합니다.


Javascript (TypeScript와 반대)에서는 개인 "멤버"기능을 사용할 수 없습니다.

클로저에 private 함수를 정의하면 클래스 인스턴스의 인스턴스 메서드로 호출 할 수 없습니다.

이것이 원하는 경우 TypeScript 함수 정의를 클래스 본문 외부로 이동하십시오.

참고 URL : https://stackoverflow.com/questions/16919473/private-functions-in-typescript

반응형