mirror of
https://github.com/sharkdp/bat.git
synced 2025-10-18 17:53:52 +01:00
Merge pull request #3435 from MuntasirSZN/fix/markdown-typescript
feat: add typescript codeblock highlight patches for markdown
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see #3068 (@ajesipow)
|
- Support negative relative line ranges, e.g. `bat -r :-10` / `bat -r='-10:'`, see #3068 (@ajesipow)
|
||||||
- Support context in line ranges, e.g. `bat -r 30::5` / `bat -r 30:40:5`, see #3345 (@cavanaug)
|
- Support context in line ranges, e.g. `bat -r 30::5` / `bat -r 30:40:5`, see #3345 (@cavanaug)
|
||||||
- Add built-in 'minus' pager, e.g. `bat --pager=builtin` see PR #3402 (@academician)
|
- Add built-in 'minus' pager, e.g. `bat --pager=builtin` see PR #3402 (@academician)
|
||||||
|
- Syntax highlighting for typescript code blocks within Markdown files, see #3435 (@MuntasirSZN)
|
||||||
|
|
||||||
## Bugfixes
|
## Bugfixes
|
||||||
|
|
||||||
|
19
assets/patches/Markdown.sublime-syntax.patch
vendored
19
assets/patches/Markdown.sublime-syntax.patch
vendored
@@ -166,7 +166,7 @@ index 19dc685d..3a45ea05 100644
|
|||||||
- match: ^\s*$\n?
|
- match: ^\s*$\n?
|
||||||
scope: invalid.illegal.non-terminated.bold-italic.markdown
|
scope: invalid.illegal.non-terminated.bold-italic.markdown
|
||||||
pop: true
|
pop: true
|
||||||
@@ -1073,6 +1031,21 @@ contexts:
|
@@ -1073,6 +1031,36 @@ contexts:
|
||||||
escape: '{{code_fence_escape}}'
|
escape: '{{code_fence_escape}}'
|
||||||
escape_captures:
|
escape_captures:
|
||||||
0: meta.code-fence.definition.end.python.markdown-gfm
|
0: meta.code-fence.definition.end.python.markdown-gfm
|
||||||
@@ -185,10 +185,25 @@ index 19dc685d..3a45ea05 100644
|
|||||||
+ escape: '{{code_fence_escape}}'
|
+ escape: '{{code_fence_escape}}'
|
||||||
+ escape_captures:
|
+ escape_captures:
|
||||||
+ 0: meta.code-fence.definition.end.puppet.markdown-gfm
|
+ 0: meta.code-fence.definition.end.puppet.markdown-gfm
|
||||||
|
+ 1: punctuation.definition.raw.code-fence.end.markdown
|
||||||
|
+ - match: |-
|
||||||
|
+ (?x)
|
||||||
|
+ {{fenced_code_block_start}}
|
||||||
|
+ ((?i:typescript|ts))
|
||||||
|
+ {{fenced_code_block_trailing_infostring_characters}}
|
||||||
|
+ captures:
|
||||||
|
+ 0: meta.code-fence.definition.begin.typescript.markdown-gfm
|
||||||
|
+ 2: punctuation.definition.raw.code-fence.begin.markdown
|
||||||
|
+ 5: constant.other.language-name.markdown
|
||||||
|
+ embed: scope:source.ts
|
||||||
|
+ embed_scope: markup.raw.code-fence.typescript.markdown-gfm
|
||||||
|
+ escape: '{{code_fence_escape}}'
|
||||||
|
+ escape_captures:
|
||||||
|
+ 0: meta.code-fence.definition.end.typescript.markdown-gfm
|
||||||
1: punctuation.definition.raw.code-fence.end.markdown
|
1: punctuation.definition.raw.code-fence.end.markdown
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x)
|
(?x)
|
||||||
@@ -1152,7 +1125,7 @@ contexts:
|
@@ -1152,7 +1155,7 @@ contexts:
|
||||||
- match: |-
|
- match: |-
|
||||||
(?x)
|
(?x)
|
||||||
{{fenced_code_block_start}}
|
{{fenced_code_block_start}}
|
||||||
|
57
tests/syntax-tests/highlighted/Markdown/typescript.md
vendored
Normal file
57
tests/syntax-tests/highlighted/Markdown/typescript.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
[38;2;253;151;31m#[0m[38;2;253;151;31m [0m[38;2;253;151;31mTypescript test[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m```[0m[38;2;190;132;255mtypescript[0m
|
||||||
|
[3;38;2;102;217;239menum[0m[38;2;255;255;255m [0m[38;2;166;226;46mStatus[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mPending[0m[38;2;255;255;255m,[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mInProgress[0m[38;2;255;255;255m,[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mCompleted[0m[38;2;255;255;255m,[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[3;38;2;102;217;239minterface[0m[38;2;255;255;255m [0m[38;2;166;226;46mTask[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mid[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;166;226;46mnumber[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mtitle[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;166;226;46mstring[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mstatus[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[38;2;166;226;46mStatus[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255massignee[0m[38;2;249;38;114m?[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;166;226;46mstring[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[3;38;2;102;217;239mclass[0m[38;2;255;255;255m [0m[38;2;166;226;46mTaskManager[0m[38;2;255;255;255m<[0m[38;2;166;226;46mT[0m[38;2;255;255;255m [0m[38;2;249;38;114mextends[0m[38;2;255;255;255m [0m[38;2;166;226;46mTask[0m[38;2;255;255;255m>[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;249;38;114mprivate[0m[38;2;255;255;255m [0m[38;2;255;255;255mtasks[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[38;2;166;226;46mT[0m[38;2;255;255;255m[[0m[38;2;255;255;255m][0m[38;2;255;255;255m [0m[38;2;249;38;114m=[0m[38;2;255;255;255m [0m[38;2;255;255;255m[[0m[38;2;255;255;255m][0m[38;2;255;255;255m;[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m [0m[38;2;166;226;46maddTask[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mtask[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[38;2;166;226;46mT[0m[38;2;255;255;255m)[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;166;226;46mvoid[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mthis[0m[38;2;255;255;255m.[0m[38;2;255;255;255mtasks[0m[38;2;255;255;255m.[0m[38;2;102;217;239mpush[0m[38;2;255;255;255m([0m[38;2;255;255;255mtask[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m [0m[38;2;166;226;46mgetTasksByStatus[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mstatus[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[38;2;166;226;46mStatus[0m[38;2;255;255;255m)[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[38;2;166;226;46mT[0m[38;2;255;255;255m[[0m[38;2;255;255;255m][0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;249;38;114mreturn[0m[38;2;255;255;255m [0m[38;2;255;255;255mthis[0m[38;2;255;255;255m.[0m[38;2;255;255;255mtasks[0m[38;2;255;255;255m.[0m[38;2;166;226;46mfilter[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mtask[0m[38;2;255;255;255m [0m[3;38;2;102;217;239m=>[0m[38;2;255;255;255m [0m[38;2;255;255;255mtask[0m[38;2;255;255;255m.[0m[38;2;255;255;255mstatus[0m[38;2;255;255;255m [0m[38;2;249;38;114m===[0m[38;2;255;255;255m [0m[38;2;255;255;255mstatus[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m [0m[38;2;249;38;114masync[0m[38;2;255;255;255m [0m[38;2;166;226;46mfetchTasks[0m[38;2;255;255;255m([0m[38;2;255;255;255m)[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[38;2;166;226;46mPromise[0m[38;2;255;255;255m<[0m[38;2;166;226;46mT[0m[38;2;255;255;255m[[0m[38;2;255;255;255m][0m[38;2;255;255;255m>[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;117;113;94m//[0m[38;2;117;113;94m Simulate async fetch[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;249;38;114mreturn[0m[38;2;255;255;255m [0m[38;2;249;38;114mnew[0m[38;2;255;255;255m [0m[3;38;2;166;226;46mPromise[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mresolve[0m[38;2;255;255;255m [0m[3;38;2;102;217;239m=>[0m[38;2;255;255;255m [0m[38;2;102;217;239msetTimeout[0m[38;2;255;255;255m([0m[38;2;255;255;255m([0m[38;2;255;255;255m)[0m[38;2;255;255;255m [0m[3;38;2;102;217;239m=>[0m[38;2;255;255;255m [0m[38;2;166;226;46mresolve[0m[38;2;255;255;255m([0m[38;2;255;255;255mthis[0m[38;2;255;255;255m.[0m[38;2;255;255;255mtasks[0m[38;2;255;255;255m)[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;190;132;255m500[0m[38;2;255;255;255m)[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255m}[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;117;113;94m//[0m[38;2;117;113;94m Type guard[0m
|
||||||
|
[3;38;2;102;217;239mfunction[0m[38;2;255;255;255m [0m[38;2;166;226;46misTask[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mobj[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;166;226;46many[0m[38;2;255;255;255m)[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;253;151;31mobj[0m[38;2;255;255;255m [0m[38;2;249;38;114mis[0m[38;2;255;255;255m [0m[38;2;166;226;46mTask[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;249;38;114mreturn[0m[38;2;255;255;255m [0m[38;2;249;38;114mtypeof[0m[38;2;255;255;255m [0m[38;2;255;255;255mobj[0m[38;2;255;255;255m.[0m[38;2;255;255;255mid[0m[38;2;255;255;255m [0m[38;2;249;38;114m===[0m[38;2;255;255;255m [0m[38;2;230;219;116m'[0m[38;2;230;219;116mnumber[0m[38;2;230;219;116m'[0m[38;2;255;255;255m [0m[38;2;249;38;114m&&[0m[38;2;255;255;255m [0m[38;2;249;38;114mtypeof[0m[38;2;255;255;255m [0m[38;2;255;255;255mobj[0m[38;2;255;255;255m.[0m[38;2;255;255;255mtitle[0m[38;2;255;255;255m [0m[38;2;249;38;114m===[0m[38;2;255;255;255m [0m[38;2;230;219;116m'[0m[38;2;230;219;116mstring[0m[38;2;230;219;116m'[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m}[0m
|
||||||
|
|
||||||
|
[38;2;117;113;94m//[0m[38;2;117;113;94m Usage[0m
|
||||||
|
[3;38;2;102;217;239mconst[0m[38;2;255;255;255m [0m[38;2;255;255;255mmanager[0m[38;2;255;255;255m [0m[38;2;249;38;114m=[0m[38;2;255;255;255m [0m[38;2;249;38;114mnew[0m[38;2;255;255;255m [0m[38;2;166;226;46mTaskManager[0m[38;2;255;255;255m<[0m[38;2;166;226;46mTask[0m[38;2;255;255;255m>[0m[38;2;255;255;255m([0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255mmanager[0m[38;2;255;255;255m.[0m[38;2;166;226;46maddTask[0m[38;2;255;255;255m([0m[38;2;255;255;255m{[0m[38;2;255;255;255m [0m[38;2;255;255;255mid[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;190;132;255m1[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255mtitle[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;230;219;116m"[0m[38;2;230;219;116mWrite docs[0m[38;2;230;219;116m"[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255mstatus[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;255;255;255mStatus[0m[38;2;255;255;255m.[0m[38;2;255;255;255mPending[0m[38;2;255;255;255m [0m[38;2;255;255;255m}[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255mmanager[0m[38;2;255;255;255m.[0m[38;2;166;226;46maddTask[0m[38;2;255;255;255m([0m[38;2;255;255;255m{[0m[38;2;255;255;255m [0m[38;2;255;255;255mid[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;190;132;255m2[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255mtitle[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;230;219;116m"[0m[38;2;230;219;116mReview PR[0m[38;2;230;219;116m"[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255mstatus[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;255;255;255mStatus[0m[38;2;255;255;255m.[0m[38;2;255;255;255mInProgress[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255massignee[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;230;219;116m"[0m[38;2;230;219;116mAlice[0m[38;2;230;219;116m"[0m[38;2;255;255;255m [0m[38;2;255;255;255m}[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
|
||||||
|
[38;2;255;255;255m([0m[38;2;249;38;114masync[0m[38;2;255;255;255m [0m[38;2;255;255;255m([0m[38;2;255;255;255m)[0m[38;2;255;255;255m [0m[3;38;2;102;217;239m=>[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[3;38;2;102;217;239mconst[0m[38;2;255;255;255m [0m[38;2;255;255;255mallTasks[0m[38;2;255;255;255m [0m[38;2;249;38;114m=[0m[38;2;255;255;255m [0m[38;2;249;38;114mawait[0m[38;2;255;255;255m [0m[38;2;255;255;255mmanager[0m[38;2;255;255;255m.[0m[38;2;166;226;46mfetchTasks[0m[38;2;255;255;255m([0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255mallTasks[0m[38;2;255;255;255m.[0m[38;2;102;217;239mforEach[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mtask[0m[38;2;255;255;255m [0m[3;38;2;102;217;239m=>[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;249;38;114mif[0m[38;2;255;255;255m [0m[38;2;255;255;255m([0m[38;2;166;226;46misTask[0m[38;2;255;255;255m([0m[38;2;255;255;255mtask[0m[38;2;255;255;255m)[0m[38;2;255;255;255m)[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m
|
||||||
|
[38;2;255;255;255m [0m[3;38;2;166;226;46mconsole[0m[38;2;255;255;255m.[0m[38;2;102;217;239mlog[0m[38;2;255;255;255m([0m[38;2;230;219;116m`[0m[38;2;230;219;116mTask #[0m[38;2;230;219;116m${[0m[38;2;255;255;255mtask[0m[38;2;230;219;116m.[0m[38;2;230;219;116mid[0m[38;2;230;219;116m}[0m[38;2;230;219;116m: [0m[38;2;230;219;116m${[0m[38;2;255;255;255mtask[0m[38;2;230;219;116m.[0m[38;2;230;219;116mtitle[0m[38;2;230;219;116m}[0m[38;2;230;219;116m [[0m[38;2;230;219;116m${[0m[38;2;255;255;255mStatus[0m[38;2;230;219;116m[[0m[38;2;255;255;255mtask[0m[38;2;230;219;116m.[0m[38;2;230;219;116mstatus[0m[38;2;230;219;116m][0m[38;2;230;219;116m}[0m[38;2;230;219;116m][0m[38;2;230;219;116m`[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255m}[0m
|
||||||
|
[38;2;255;255;255m [0m[38;2;255;255;255m}[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m}[0m[38;2;255;255;255m)[0m[38;2;255;255;255m([0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
|
||||||
|
[38;2;117;113;94m//[0m[38;2;117;113;94m Type assertion[0m
|
||||||
|
[3;38;2;102;217;239mconst[0m[38;2;255;255;255m [0m[38;2;255;255;255munknownValue[0m[38;2;249;38;114m:[0m[38;2;255;255;255m [0m[3;38;2;166;226;46munknown[0m[38;2;255;255;255m [0m[38;2;249;38;114m=[0m[38;2;255;255;255m [0m[38;2;255;255;255m{[0m[38;2;255;255;255m [0m[38;2;255;255;255mid[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;190;132;255m3[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255mtitle[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;230;219;116m"[0m[38;2;230;219;116mTest[0m[38;2;230;219;116m"[0m[38;2;255;255;255m,[0m[38;2;255;255;255m [0m[38;2;255;255;255mstatus[0m[38;2;255;255;255m:[0m[38;2;255;255;255m [0m[38;2;255;255;255mStatus[0m[38;2;255;255;255m.[0m[38;2;255;255;255mCompleted[0m[38;2;255;255;255m [0m[38;2;255;255;255m}[0m[38;2;255;255;255m;[0m
|
||||||
|
[3;38;2;102;217;239mconst[0m[38;2;255;255;255m [0m[38;2;255;255;255massertedTask[0m[38;2;255;255;255m [0m[38;2;249;38;114m=[0m[38;2;255;255;255m [0m[38;2;255;255;255munknownValue[0m[38;2;255;255;255m [0m[38;2;249;38;114mas[0m[38;2;255;255;255m [0m[38;2;166;226;46mTask[0m[38;2;255;255;255m;[0m
|
||||||
|
[3;38;2;166;226;46mconsole[0m[38;2;255;255;255m.[0m[38;2;102;217;239mlog[0m[38;2;255;255;255m([0m[38;2;255;255;255massertedTask[0m[38;2;255;255;255m.[0m[38;2;255;255;255mtitle[0m[38;2;255;255;255m)[0m[38;2;255;255;255m;[0m
|
||||||
|
[38;2;255;255;255m```[0m
|
57
tests/syntax-tests/source/Markdown/typescript.md
vendored
Normal file
57
tests/syntax-tests/source/Markdown/typescript.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# Typescript test
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
enum Status {
|
||||||
|
Pending,
|
||||||
|
InProgress,
|
||||||
|
Completed,
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Task {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
status: Status;
|
||||||
|
assignee?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TaskManager<T extends Task> {
|
||||||
|
private tasks: T[] = [];
|
||||||
|
|
||||||
|
addTask(task: T): void {
|
||||||
|
this.tasks.push(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTasksByStatus(status: Status): T[] {
|
||||||
|
return this.tasks.filter(task => task.status === status);
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchTasks(): Promise<T[]> {
|
||||||
|
// Simulate async fetch
|
||||||
|
return new Promise(resolve => setTimeout(() => resolve(this.tasks), 500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type guard
|
||||||
|
function isTask(obj: any): obj is Task {
|
||||||
|
return typeof obj.id === 'number' && typeof obj.title === 'string';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Usage
|
||||||
|
const manager = new TaskManager<Task>();
|
||||||
|
manager.addTask({ id: 1, title: "Write docs", status: Status.Pending });
|
||||||
|
manager.addTask({ id: 2, title: "Review PR", status: Status.InProgress, assignee: "Alice" });
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const allTasks = await manager.fetchTasks();
|
||||||
|
allTasks.forEach(task => {
|
||||||
|
if (isTask(task)) {
|
||||||
|
console.log(`Task #${task.id}: ${task.title} [${Status[task.status]}]`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
|
||||||
|
// Type assertion
|
||||||
|
const unknownValue: unknown = { id: 3, title: "Test", status: Status.Completed };
|
||||||
|
const assertedTask = unknownValue as Task;
|
||||||
|
console.log(assertedTask.title);
|
||||||
|
```
|
Reference in New Issue
Block a user