TypeScript의 Bookshelf Plugin 유형 정의
10321 단어 Node.jsBookshelfTypeScript
입문
TypeScript에서 Bookshelf Plugin의 유형을 정의하는 방법입니다.
나는 뭘 좀 써야 할 것 같아, Advent Calendar가 늦었어.
Bookshelf Plugin이란?
BookshelfNode입니다.js의 ORM 중 하나입니다. 그 플러그인은 Bookshelf 플러그인입니다.
요즘 TypeScript의 유행은 TypeORM...💦.
DAOModel
의 경우 페이지 정렬 등의 기능을 확장할 수 있습니다.
다음 플러그인은 Bookshelf 자체에 내장되어 있으며, 필요에 따라 즉시 사용할 수 있으며, 추가 의존 관계가 없습니다.
require
함수나 import
문장을 사용하지 않고 문자열에서 다른 Model
플러그인을 인용합니다.많은 관계를 가진 모델 등에 쓰인다.Model
에 fetchPage
방법을 추가하여 LIMIT
또는 OFFSET
전체 열의 플러그인을 자동으로 지정합니다.이걸로 하고 싶어요.snake_case
에서 camelCase
또는 그 반대의 플러그인으로 변환됩니다.몰드 정의가 필요하지 않습니다.set
행동을 바꾸기 위해 연결할 수 있는 플러그인입니다.이걸로 뭐든지...💦💦💦. 플러그인 유형 정의
Bookshelf 자체에는 유형 정의
@types/bookshelf
가 존재하지만 라이브러리에 내장된 플러그인은 이 유형 정의에 포함되지 않습니다.또한 라이브러리 밖Community Plugins은 당연히 스스로 유형 정의를 해야 한다.
이번에는 페이지를 넘기는 플러그인
pagination
을 사용하고 싶어서 이 유형의 정의를 만들었다.참조는 API Reference 이 아니라 pagination.js 입니다.
Bookshelf의 API 참조는 영어로 작성되었기 때문에 실제 구현도 이해했습니다.💦.
index.d.ts
import * as Bookshelf from 'bookshelf';
import * as BlueBird from 'bluebird';
declare module 'bookshelf' {
interface Model<T extends Model<any>> {
fetchPage(options?: FetchPageSizeOptions): BlueBird<PaginationCollection<T, SizePagination>>;
fetchPage(options?: FetchPageLimitOptions): BlueBird<PaginationCollection<T, LimitPagination>>;
}
interface Collection<T extends Model<any>> {
fetchPage(options?: CollectionFetchPageSizeOptions): BlueBird<PaginationCollection<T, SizePagination>>;
fetchPage(options?: CollectionFetchPageLimitOptions): BlueBird<PaginationCollection<T, LimitPagination>>;
}
interface FetchPageSizeOptions extends FetchOptions {
pageSize?: number;
page?: number;
}
interface FetchPageLimitOptions extends FetchOptions {
limit: number;
offset: number;
}
interface CollectionFetchPageSizeOptions extends CollectionFetchOptions {
pageSize?: number;
page?: number;
}
interface CollectionFetchPageLimitOptions extends CollectionFetchOptions {
limit: number;
offset: number;
}
interface PaginationCollection<T extends Model<any>, U extends Pagination> extends Collection<T> {
pagination: U;
}
interface Pagination {
rowCount: number;
pageCount: number;
}
interface SizePagination extends Pagination {
page: number;
pageSize: number;
}
interface LimitPagination extends Pagination {
offset: number;
limit: number;
}
}
걱정되는 것은 class Model<T extends Model<any>>
다른 방법을 어떻게 정의하는가 하는 것이다. 그러나 같은 이름의 인터페이스로 정의하면 추가할 수 있다.공식 참고Using a class as an interface에 따르면
Using a class as an interface
As we said in the previous section, a class declaration creates two things: a type representing instances of the class and a constructor function. Because classes create types, you can use them in the same places you would be able to use interfaces.
있다
클래스를 인터페이스로 사용
위에서 말한 바와 같이 클래스 성명 생성은 다음과 같은 두 가지 사물, 클래스의 실례와 구조 함수의 유형을 나타낸다.클래스를 통해 그것들의 유형을 생성할 수 있으며, 그것들은 일부 지역에서 인터페이스로 사용할 수 있다.
하계.
TypeScript에서 여러 인터페이스를 정의하면 하나의 인터페이스에 통합되기 때문에 클래스와 같은 인터페이스에 결과를 추가하는 방법으로 이번 상황을 처리하고 싶습니다.
마지막
TypeScript 자체의 책은 매우 적죠.
엔지니어들이 영어를 미리 설치했는데 공식 참고를 봐야 하나...💦💦💦.
천하의 아마존도 찾아보았는데, 언뜻 보기에 매우 좋은 것은
TypeScript 실습 프로그램
차이가 많지 않다.
언어의 진화에 대해 출판 연도가 상당히 오래되었는데, async/await
아직 없을 때의 책을 여러분이 한 획 집필할 수 있겠습니까?
이 글에 표시된 코드는 WTFPL v2로 책임을 질 수 없지만 자유롭게 사용할 수 있습니다.
실제로 GitHub도 이상한 홍보와 함께 상승했다.
Bookshelf Plugin의 유형 정의를 어떻게 높여야 할지 아시는 분께서...💦💦💦.
Reference
이 문제에 관하여(TypeScript의 Bookshelf Plugin 유형 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/leak4mk0/items/46cf70bb9ebcfd941614
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(TypeScript의 Bookshelf Plugin 유형 정의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/leak4mk0/items/46cf70bb9ebcfd941614텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)