Riot v4는 TypeScript를 지원하기 때문에 사용해 보았습니다.
12751 단어 riot.jsriotTypeScript
환경 구축
내부 브라우저 컴파일 중 TypeScript
을 사용할 수 없기 때문에 webpack
등 캐리어를 사용해야 한다.
신속한 환경 구축을 위해 정부가 준비한 샘플을 바탕으로 한다.
https://github.com/riot/examples/typescript
다운로드
https://github.com/riot/examples
[Clone or download] -> [Download ZIP]
모든 example가 다운로드되기 때문에 typescript를 사용합니다.
설치
cd ./path/to/riot-examples/typescript
npm install
부팅
npm start
브라우저에서 ↓ 을 열어 무작위 수를 생성하는 예시를 표시합니다.
http://localhost:3000/
유형 스크립트에 Riot 구성 요소 쓰기
riot-example/typescript의 코드와 JavaScript
의 설명을 비교해 보세요.
random.riot 템플릿 섹션
random/random.riot<random>
<h3>{ props.title }</h3>
<button onclick={ generate }>
Generate
</button>
<h1>
{ state.number }
</h1>
<logs logs={ state.logs } onclear={ clearLogs }></logs>
<script type="ts">
// ...(省略)
</script>
</random>
이것은 JavaScript
로 쓴 방식과 같다.
random.riot의 Script 섹션
random/random.riot<random>
<!-- (省略) -->
<script type="ts"> // (1)
import Logs from '../logs/logs.riot'
import {RandomComponent} from './types' // (2)
function Random(): RandomComponent { // (3)
return {
state: {
number: null,
logs: []
},
generate(event: MouseEvent): void { // (4)
this.update({
number: Math.floor(Math.random() * 10000),
logs: this.state.logs.concat({
text: `Generate button clicked. Event type is ${event.type}`
})
})
},
clearLogs(): void {
this.update({
logs: []
})
}
}
}
Random.components = {
Logs
}
export default Random
</script>
</random>
cd ./path/to/riot-examples/typescript
npm install
npm start
riot-example/typescript의 코드와
JavaScript
의 설명을 비교해 보세요.random.riot 템플릿 섹션
random/random.riot
<random>
<h3>{ props.title }</h3>
<button onclick={ generate }>
Generate
</button>
<h1>
{ state.number }
</h1>
<logs logs={ state.logs } onclear={ clearLogs }></logs>
<script type="ts">
// ...(省略)
</script>
</random>
이것은 JavaScript
로 쓴 방식과 같다.random.riot의 Script 섹션
random/random.riot
<random>
<!-- (省略) -->
<script type="ts"> // (1)
import Logs from '../logs/logs.riot'
import {RandomComponent} from './types' // (2)
function Random(): RandomComponent { // (3)
return {
state: {
number: null,
logs: []
},
generate(event: MouseEvent): void { // (4)
this.update({
number: Math.floor(Math.random() * 10000),
logs: this.state.logs.concat({
text: `Generate button clicked. Event type is ${event.type}`
})
})
},
clearLogs(): void {
this.update({
logs: []
})
}
}
}
Random.components = {
Logs
}
export default Random
</script>
</random>
type="ts"
를 지정합니다.https://riot.js.org/ja/api/#상태 처리
random.riot와 쌍을 이루는 types.ts
random/types.ts
import {RiotComponentExport} from 'riot'
export interface RandomComponentState { // (1)
number: number | null;
logs: { text: string }[];
}
export interface RandomComponentProps { // (1)
title: string;
}
export interface RandomComponent extends RiotComponentExport<RandomComponentProps, RandomComponentState> { // (2)
generate(event: MouseEvent): void;
clearLogs(): void;
state: RandomComponentState;
}
JavaScript
에서 설명할 때 존재하지 않는 형식 정의 파일에서 구성 요소의 인터페이스를 정의했습니다.props
및 state
필드와 유형을 지정할 수 있습니다.TypeScript 혜택은 어디에서 받을 수 있습니까?
나는 이곳이 가장 중요한 곳이라고 생각해서 많이 시도했다.
number 형식에 정의된 변수에 문자열 추가
function Random(): RandomComponent {
return {
state: {
number: 'riot.js', // <-- ここを変更
logs: []
},
// ...
}
}
// -------------------------------
// random.riot.ts
// Error 2322 : Type 'string' is not assignable to type 'number | null'.
할당할 수 없는 유형이라 오류가 발생했습니다.
types.ts에만 함수 추가
export interface RandomComponent extends RiotComponentExport<RandomComponentProps, RandomComponentState> {
generate(event: MouseEvent): void;
clearLogs(): void;
hoge(): void; // <-- ここに追加
state: RandomComponentState;
}
// -------------------------------
// random.riot.ts
// Error 2741 : Property 'hoge' is missing in type '{ state: { number: null; logs: never[]; }; generate(event: MouseEvent): void; clearLogs(): void; }' but required in type 'RandomComponent'.
인터페이스가 정의되었지만 실행되지 않았기 때문에 오류가 발생했습니다.types.ts
에 필드를 추가한 결과state
도 마찬가지입니다.
random.riot에만 함수 추가
function Random(): RandomComponent {
return {
// ...
clearLogs(): void {
this.update({
logs: []
})
},
fuga(): void { // <-- ここに追加
// 何らかの処理
}
}
}
이것은 잘못을 일으키지 않았다.
템플릿 부분에서 호출할 때 형식 정의를 쓸 수 있으며 로컬 함수를 쓰지 않습니다.
.riot 파일에서 코드 보충이 유효합니까
Visual Studio 코드가 잘못되었습니다.
Riot.js는 HTML에서 스크립트를 쓰는 형식이기 때문에 어쩔 수 없습니다.
감상
쓰기 정의 파일의 작업량은 증가하지만 인터페이스의 혜택을 받고 싶은 상황에서 사용하고 싶습니다.
Reference
이 문제에 관하여(Riot v4는 TypeScript를 지원하기 때문에 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/black-trooper/items/c45f92a1830340218a14
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function Random(): RandomComponent {
return {
state: {
number: 'riot.js', // <-- ここを変更
logs: []
},
// ...
}
}
// -------------------------------
// random.riot.ts
// Error 2322 : Type 'string' is not assignable to type 'number | null'.
export interface RandomComponent extends RiotComponentExport<RandomComponentProps, RandomComponentState> {
generate(event: MouseEvent): void;
clearLogs(): void;
hoge(): void; // <-- ここに追加
state: RandomComponentState;
}
// -------------------------------
// random.riot.ts
// Error 2741 : Property 'hoge' is missing in type '{ state: { number: null; logs: never[]; }; generate(event: MouseEvent): void; clearLogs(): void; }' but required in type 'RandomComponent'.
function Random(): RandomComponent {
return {
// ...
clearLogs(): void {
this.update({
logs: []
})
},
fuga(): void { // <-- ここに追加
// 何らかの処理
}
}
}
Reference
이 문제에 관하여(Riot v4는 TypeScript를 지원하기 때문에 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/black-trooper/items/c45f92a1830340218a14텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)