diff --git a/README.md b/README.md index bf5e2f0e..32248179 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ This project is aim to make you better understand how the type system works, wri > Click the following badges to see detail of the challenges! -
13・Hello World


4・Pick<T, K> 7・Readonly<T> 11・Tuple to Object 14・First of Array 18・Length of Tuple 43・Exclude


2・Get Return Type 3・Omit<T, K> 8・Readonly 2 9・Deep Readonly 10・Tuple to Union 12・Chainable Options 15・Last of Array 16・Pop


6・Simple Vue 17・Currying 1


5・Get Readonly Keys
By Tags
#4.014・First of Array 15・Last of Array 16・Pop 17・Currying 1
#application12・Chainable Options 6・Simple Vue
#array14・First of Array 15・Last of Array 16・Pop 17・Currying 1
#built-in4・Pick<T, K> 7・Readonly<T> 2・Get Return Type 3・Omit<T, K>
#deep9・Deep Readonly
#infer2・Get Return Type 10・Tuple to Union
#object-keys7・Readonly<T> 8・Readonly 2 9・Deep Readonly 5・Get Readonly Keys
#readonly7・Readonly<T> 8・Readonly 2 9・Deep Readonly
#this6・Simple Vue
#tuple18・Length of Tuple 10・Tuple to Union
#union4・Pick<T, K> 3・Omit<T, K> 10・Tuple to Union
#utils5・Get Readonly Keys
+1
13・Hello World

6
4・Pick<T, K> 7・Readonly<T> 11・Tuple to Object 14・First of Array 18・Length of Tuple 43・Exclude

8
2・Get Return Type 3・Omit<T, K> 8・Readonly 2 9・Deep Readonly 10・Tuple to Union 12・Chainable Options 15・Last of Array 16・Pop

2
6・Simple Vue 17・Currying 1

1
5・Get Readonly Keys
By Tags
#4.014・First of Array 15・Last of Array 16・Pop 17・Currying 1
#application12・Chainable Options 6・Simple Vue
#array14・First of Array 15・Last of Array 16・Pop 17・Currying 1
#built-in4・Pick<T, K> 7・Readonly<T> 2・Get Return Type 3・Omit<T, K>
#deep9・Deep Readonly
#infer2・Get Return Type 10・Tuple to Union
#object-keys7・Readonly<T> 8・Readonly 2 9・Deep Readonly 5・Get Readonly Keys
#readonly7・Readonly<T> 8・Readonly 2 9・Deep Readonly
#this6・Simple Vue
#tuple18・Length of Tuple 10・Tuple to Union
#union4・Pick<T, K> 3・Omit<T, K> 10・Tuple to Union
#utils5・Get Readonly Keys
## Recommended Readings diff --git a/README.zh-CN.md b/README.zh-CN.md index dc11a0c7..f62d4e6c 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -30,7 +30,7 @@ TypeScript 类型体操姿势合集 > 点击下方徽章查看题目内容 -
13・Hello World


4・实现 Pick<T, K> 7・实现 Readonly<T> 11・元组转换为对象 14・第一个元素 18・获取元组长度 43・Exclude


2・获取函数返回类型 3・实现 Omit<T, K> 8・Readonly 2 9・深度 Readonly 10・元组转合集 12・可串联构造器 15・最后一个元素 16・出堆


6・简单的 Vue 类型 17・科里化 1


5・获取只读字段
By Tags
#4.014・第一个元素 15・最后一个元素 16・出堆 17・科里化 1
#application12・可串联构造器 6・简单的 Vue 类型
#array14・第一个元素 15・最后一个元素 16・出堆 17・科里化 1
#built-in4・实现 Pick<T, K> 7・实现 Readonly<T> 2・获取函数返回类型 3・实现 Omit<T, K>
#deep9・深度 Readonly
#infer2・获取函数返回类型 10・元组转合集
#object-keys7・实现 Readonly<T> 8・Readonly 2 9・深度 Readonly 5・获取只读字段
#readonly7・实现 Readonly<T> 8・Readonly 2 9・深度 Readonly
#this6・简单的 Vue 类型
#tuple18・获取元组长度 10・元组转合集
#union4・实现 Pick<T, K> 3・实现 Omit<T, K> 10・元组转合集
#utils5・获取只读字段
+1
13・Hello World

6
4・实现 Pick<T, K> 7・实现 Readonly<T> 11・元组转换为对象 14・第一个元素 18・获取元组长度 43・Exclude

8
2・获取函数返回类型 3・实现 Omit<T, K> 8・Readonly 2 9・深度 Readonly 10・元组转合集 12・可串联构造器 15・最后一个元素 16・出堆

2
6・简单的 Vue 类型 17・科里化 1

1
5・获取只读字段
By Tags
#4.014・第一个元素 15・最后一个元素 16・出堆 17・科里化 1
#application12・可串联构造器 6・简单的 Vue 类型
#array14・第一个元素 15・最后一个元素 16・出堆 17・科里化 1
#built-in4・实现 Pick<T, K> 7・实现 Readonly<T> 2・获取函数返回类型 3・实现 Omit<T, K>
#deep9・深度 Readonly
#infer2・获取函数返回类型 10・元组转合集
#object-keys7・实现 Readonly<T> 8・Readonly 2 9・深度 Readonly 5・获取只读字段
#readonly7・实现 Readonly<T> 8・Readonly 2 9・深度 Readonly
#this6・简单的 Vue 类型
#tuple18・获取元组长度 10・元组转合集
#union4・实现 Pick<T, K> 3・实现 Omit<T, K> 10・元组转合集
#utils5・获取只读字段
## 推荐读物 diff --git a/scripts/readme.ts b/scripts/readme.ts index 85a63bb1..cbeee85b 100644 --- a/scripts/readme.ts +++ b/scripts/readme.ts @@ -50,8 +50,8 @@ function toDifficultyBadge(difficulty: string, locale: SupportedLocale) { return toBadge('', t(locale, `difficulty.${difficulty}`), DifficultyColors[difficulty]) } -function toDifficultyBadgeInverted(difficulty: string, locale: SupportedLocale) { - return toBadge(t(locale, `difficulty.${difficulty}`), ' ', DifficultyColors[difficulty]) +function toDifficultyBadgeInverted(difficulty: string, locale: SupportedLocale, count: number) { + return toBadge(t(locale, `difficulty.${difficulty}`), count.toString(), DifficultyColors[difficulty]) } function quizToBadge(quiz: Quiz, locale: string) { @@ -101,7 +101,7 @@ async function insertInfoReadme(filepath: string, quiz: Quiz, locale: SupportedL const info = resolveInfo(quiz, locale) - const avaliableLocales = supportedLocales.filter(l => l !== locale).filter(l => !!quiz.readme[l]) + const availableLocales = supportedLocales.filter(l => l !== locale).filter(l => !!quiz.readme[l]) text = text .replace( @@ -111,7 +111,7 @@ async function insertInfoReadme(filepath: string, quiz: Quiz, locale: SupportedL + `

${toAuthorInfo(info.author)}

` + '

' + toBadgeLink(toPlayShort(quiz.no, locale), '', t(locale, 'badge.take-the-challenge'), '3178c6', '?logo=typescript') - + (avaliableLocales.length ? ('   ' + avaliableLocales.map(l => toBadgeLink(toNearborREADME(quiz, l), '', t(l, 'display'), 'gray')).join(' ')) : '') + + (availableLocales.length ? ('   ' + availableLocales.map(l => toBadgeLink(toNearborREADME(quiz, l), '', t(l, 'display'), 'gray')).join(' ')) : '') + '

' + '', ) @@ -140,9 +140,10 @@ async function updateIndexREADME(quizes: Quiz[]) { // Difficulty const quizesByDifficulty = [...quizes].sort((a, b) => DifficultyRank.indexOf(a.difficulty) - DifficultyRank.indexOf(b.difficulty)) + for (const quiz of quizesByDifficulty) { if (prev !== quiz.difficulty) - challengesREADME += `${prev ? '

' : ''}${toDifficultyBadgeInverted(quiz.difficulty, locale)}
` + challengesREADME += `${prev ? '

' : ''}${toDifficultyBadgeInverted(quiz.difficulty, locale, quizesByDifficulty.filter(q => q.difficulty === quiz.difficulty).length)}
` challengesREADME += quizToBadge(quiz, locale)