타입스크립트 기호
이 섹션에서는 심볼 타입의 구문, 사용법 및 적용 시나리오에 대해 설명합니다. 심볼()에서 반환되는 각 값의 고유성은 심볼 타입을 사용하는 가장 중요한 이유입니다.
설명
기호는 기본 데이터 유형입니다.
Symbol() 함수는 심볼 타입의 값을 반환합니다. Symbol()에서 반환되는 각 기호 값은 고유합니다.
구문
기호([설명])
매개변수 설명: 선택 사항, 문자열 유형입니다.
소개
Symbol()을 사용하여 새 심볼 유형을 만듭니다:
const sym1: symbol = Symbol()
const sym2: symbol = Symbol('foo')
const sym3: symbol = Symbol('foo')
위의 코드는 세 가지 새로운 심볼 유형을 생성하지만 Symbol()에서 반환되는 각 값은 고유하다는 점에 유의하세요:
console.log(sym2 === sym3) // false
코드 설명: 각 Symbol() 메서드는 고유한 값을 반환하므로 sym2와 sym3는 같지 않습니다.
Symbol()이 생성자로서 불완전합니다:
const sym = new Symbol() // TypeError
이 구문은 기본 데이터형을 둘러싸는 명시적 래퍼 객체를 만드는 것이 ECMAScript 6부터 더 이상 지원되지 않기 때문에 오류를 보고하지만, 레거시 이유로 new Boolean(), new String() 및 new Number()는 여전히 생성할 수 있습니다:
const symbol = new Symbol() // TypeError
const bigint = new BigInt() // TypeError
const number = new Number() // OK
const boolean = new Boolean() // OK
const string = new String() // OK
시나리오
- 객체에 많은 속성()이 있는 경우 속성 이름을 재정의하기 쉬운데, 이는 vue-router의 name 속성과 같은 기호 값을 사용하여 방지할 수 있습니다.
// a.js
export const aRouter = {
path: '/index',
name: Symbol('index'),
component: Index
},
// b.js
export const bRouter = {
path: '/home',
name: Symbol('index'), //
component: Home
},
// routes.js
import { aRouter } from './a.js'
import { bRouter } from './b.js'
const routes = [
aRouter,
bRouter
]
코드 설명: 서로 다른 두 파일이 속성 이름의 값으로 동일한 심볼('index')을 사용하므로 심볼 유형의 고유성으로 인한 중복 정의를 피할 수 있습니다.
- 아날로그 클래스의 비공개 메서드
const permission: symbol = Symbol('permission')
class Auth {
[permission]() {
// do something
}
}
이 경우 클래스의 인스턴스를 통해 메서드를 가져올 수 없으므로 클래스의 비공개 메서드를 시뮬레이션할 수 없습니다.
그러나 타입스크립트는 비공개 키워드를 사용할 수 있으므로 이 메서드는 자바스크립트에서 사용할 수 있습니다.
- 사용 가능 여부 결정... 반복 횟수
if (Symbol.iterator in iterable) {
for(let n of iterable) {
console.log(n)
}
}
이 점은 반복자 섹션에서 강조할 것이므로 여기에 알아야 할 사항이 있습니다:
- for... 의 루프는 데이터 구조의 Symbol.iterator 메서드를 호출합니다.
- for... 의 경우 열거 가능한 속성만 반복할 수 있습니다.
- 심볼.프로토타입.설명
의 선택적 문자열은 원하는 경우 심볼에 대한 설명입니다:
const sym: symbol = Symbol('mybj')
console.log(sym); // Symbol(mybj)
console.log(sym.toString()); // Symbol(mybj)
console.log(sym.description); // mybj
팁: 설명 속성은 Node.js의 최소 지원 버전인 ES1029의 새로운 표준입니다.
요약
이 섹션에서는 자주 사용되지는 않지만 특정 시나리오에서 매우 유용한 심볼의 몇 가지 일반적인 용도에 대해 설명합니다.




