python typing typescript_将 python 数据转化为 TypeScript 格式
前段時間寫過這篇文章將 python 數據轉化為 lua 格式, 這段時間因為新項目改用 Creator + TypeScript 的原因, 需要導出 ts 格式的數據.
當然我們可以選擇使用 json/yaml 等格式作為數據文件, 這會簡單很多, 但是有兩個原因, 使得我們一致認為 ts 格式的數據是更好的選擇:
訪問數據時 VSCode 會根據數據內容給出提示
打包時會被編譯加密, 省去自己加密數據文件的工作
其中第一點是最為重要的, 這也是我們立項之初就選擇 TypeScript 的重要原因:
這太棒了, 下面就讓我們看看這個文件是如何生成的吧.
魔改 lua.py
我們直接在前一篇文章的 lua.py 的基礎上改, 這樣會節省一些準備工作. 首先我們來對比一下 lua 和 ts 語法的區別:
1
2
3
4
5
6
7
8{
name = "Nick",
condition_VIP_level = 0,
item = {
[1] = 5,
[2] = 10
}
}
1
2
3
4
5
6
7
8{
name: "Nick",
condition_VIP_level: 0,
item: [
5,
10,
],
}
從上面的示例可以看出, 這兩個語言還是蠻像的, 只是有一些細微的區別.
Dict
lua 使用 =, 而 ts 使用 :, 我們直接修改:
1key_separator = ': '
另有一個小細節, tslint 推薦最后一個元素后面也加上 ,, 猜測這樣做的好處是方便移動, 新增新的條目, 這樣只用改動一行就行. 我們修改:
1
2# yield '\n' + (' ' * (_indent * _current_indent_level))
yield _item_separator + '\n' + (' ' * (_indent * _current_indent_level))
Array
lua 中創建 Array 也是用的 {}, 而 ts 是 [], 這個很好改, 將 _iterencode_list 中的標簽改一下就行.
Array 和 Dict 一樣, 最后一個元素要加逗號, 和 Dict 的修改方法一致.
另我們的原始數據有一個 bug, List 類型的數據也會創建 Dict 來處理, 下標還是從 1 開始的. 于是我寫了一個小函數來將這種類型轉換為 List 格式:
1
2
3
4
5
6
7
8
9
10
11
12
13def dict_to_array(dct):
array = [None] * len(dct)
for key, value in dct.iteritems():
if type(key) == int:
try:
array[key-1] = value
except Exception as e:
break
for item in array:
if not item:
return
return array
然后在渲染 Dict 的時候判斷下, 如果可以轉化為 List 的話就用 List 去渲染.
導出
之前 lua 的導出用的是 return xxx; 的形式, 在 ts 中修改為:
1return "export default " + cls(...) + ";\n"
以上就是修改的全部內容, 技術含量不高, 以后也不會再寫類似的文章了. 從這兩次的修改中, 可以看到 Python json 庫設計的非常棒, 只需要做少量修改就可以變成其他數據格式. 其中對 yield 用法堪稱典范, 十分值得我們學習, 有機會我們應該就這點進行賞析.
總結
以上是生活随笔為你收集整理的python typing typescript_将 python 数据转化为 TypeScript 格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5g虚拟技术旅游_5G赋能VR产业变革
- 下一篇: 银行流水什么意思