지금은 2021년이고 TypeScript에서 이것을 작성하는 가장 좋은 방법을 아직 모릅니다.
7995 단어 typescriptjavascript
이 데이터를 설명하는 더 좋은 방법을 알고 있다면 알려주세요.
기능
기능적이고 간단하지만 별도로 정의하거나 ReturnType<typeof person>
사용하지 않는 한 반환 유형을 생성하기가 어렵습니다. 😢
const person = (name: string) => {
const initial = name.charAt(0);
const length = name.length;
const initialRegex = new RegExp(initial, 'g');
const initialOccurance = (name.match(initialRegex) || []).length;
return { initial, length, initialRegex, initialOccurance};
}
게터가 있는 클래스
getter를 사용한 클래스 기반 접근 방식은 덜 중복되고 위와 같이 내보낼 이름의 반복이 없기 때문에 가장 우아하다고 생각합니다. 그러나 런타임에 모든 것을 실행하지 않는다는 경고(또는 이점)는 흥미롭습니다. 즉, 초기화 시 속성이 처리되지 않지만 캐시되지도 않으므로 실행할 때마다this.initial
해당 코드를 계속해서 실행해야 합니다. .
class Person {
constructor (public name: string) {}
get initial () {
return this.name.charAt(0);
}
get initialRegex () {
return new RegExp(this.initial, 'g');
}
get length () {
return this.initial.length
}
get initialOccurance () {
return (this.name.match(this.initialRegex) || []).length;
}
}
이러한 모든 속성을 가진 개체를 얻을 수 있는 방법이 없기 때문에 이것은 실제로 공정한 경쟁자가 아닙니다. 속성을 다시 반복적으로 구축하는 .toJSON()
메서드를 추가해야 합니다.
toJSON() {
return {
name: this.name,
initial: this.initial,
length: this.length,
initialRegex: this.initialRegex
}
}
초기화된 속성이 있는 클래스
이것은 모든 속성을 생성자로 초기화하여 캐싱 문제를 해결하지만 지금 클래스에서 유형을 정의해야 하는 반복이 발생합니다. 🙄
class Person {
initial: string;
length: number;
initialRegex: RegExp;
initialOccurance: number;
constructor (public name: string) {
this.initial = name.charAt(0);
this.length = name.length;
this.initialRegex = new RegExp(this.initial, 'g');
this.initialOccurance = (name.match(this.initialRegex) || []).length;
}
}
왜 그렇게 많은 옵션이 있습니까? 왜 그들 중 누구도 좋지 않습니까?
Reference
이 문제에 관하여(지금은 2021년이고 TypeScript에서 이것을 작성하는 가장 좋은 방법을 아직 모릅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/reggi/it-s-2021-and-i-still-don-t-know-the-best-way-to-write-this-in-typescript-2744
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const person = (name: string) => {
const initial = name.charAt(0);
const length = name.length;
const initialRegex = new RegExp(initial, 'g');
const initialOccurance = (name.match(initialRegex) || []).length;
return { initial, length, initialRegex, initialOccurance};
}
class Person {
constructor (public name: string) {}
get initial () {
return this.name.charAt(0);
}
get initialRegex () {
return new RegExp(this.initial, 'g');
}
get length () {
return this.initial.length
}
get initialOccurance () {
return (this.name.match(this.initialRegex) || []).length;
}
}
toJSON() {
return {
name: this.name,
initial: this.initial,
length: this.length,
initialRegex: this.initialRegex
}
}
class Person {
initial: string;
length: number;
initialRegex: RegExp;
initialOccurance: number;
constructor (public name: string) {
this.initial = name.charAt(0);
this.length = name.length;
this.initialRegex = new RegExp(this.initial, 'g');
this.initialOccurance = (name.match(this.initialRegex) || []).length;
}
}
Reference
이 문제에 관하여(지금은 2021년이고 TypeScript에서 이것을 작성하는 가장 좋은 방법을 아직 모릅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/reggi/it-s-2021-and-i-still-don-t-know-the-best-way-to-write-this-in-typescript-2744텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)