我仍在學習關于Typescript和Angular的各種編碼方式。
今天我遇到了這樣的情況,對所編碼的方法沒有任何評論。
在我看來,它以某種方式強制要求傳入的值必須是定義的值之一,但沒有利用 ENUM 來強制執行,這導致了在一個沒有檔案的大型代碼庫中的其他問題。
我是否認為這是在強制執行值必須等于||選項之一?
static getEndpoint = (type:
對我來說,我會沿著ENUM和
的思路做一些事情。export enum MyTypes {
ALPHA = 'alpha'/span>,
BRAVO = 'bravo',
CHARLIE = 'charlie',
}
然后
static getEndpoint = (type: MyTypes = MyTypes.ALPHA) => /span> {}
uj5u.com熱心網友回復:
如果它是:
static getEndpoint = (type: 'alpha' | 'bravo' | 'charlie' = 'alpha') =>{}
那么是的。但目前它將接受everystring,并默認為'alpha'。因為:
(type: string = 'alpha'/span> || 'bravo'/span> || 'charlie'/span>)
//^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^)
// |默認值,。
// | 縮小為。'alpha'
// | |
// -- 實際型別(這里:字串)
參考:文字型別
uj5u.com熱心網友回復:
顯示的代碼無法編譯,它缺少一個'。但是,假設你真的有這個:
static getEndpoint = (type: string = 'alpha' || 'bravo' || 'charlie') => {}
那么,除了type必須是一個字串外,這段代碼并沒有強制執行任何東西。上面的代碼在功能上等同于:
static getEndpoint = (type: string = 'alpha') => {}
=后面的部分是一個默認的引數值,運算式'alpha' || 'bravo' || 'charlie'評估為'alpha' 。
這可能是意思是這樣的:
static getEndpoint = (type: 'alpha' | 'bravo' | 'charlie') => {}
這是一個聯盟的字串字面型別。這就要求傳遞給type的型別是字串字面型別"alpha"、"bravo"或"charlie"。這樣就可以了:
getEndpoint("alpha"/span>)。
但是,即使s包含字串"alpha",如果在編譯時不能證明這一點,這也不行:
let s: string。
//...設定`s`的東西...
getEndpoint(s)。
在這種形式下,字串字面型別的聯合執行了類似于列舉的功能。
對我來說,我會做一些類似于......的事情。
你在那里做了兩個改變:
- 使用了一個列舉。
- 使用了一個列舉 。
- 提供了一個不同的默認值 --好吧,不,是同一個默認值,但你是故意這么做的:-)
你的版本剛剛好,但是如果你想對字串字面型別進行這樣的處理,它應該是這樣的:
static getEndpoint = (type: 'alpha' | 'bravo' | 'charlie' = 'alpha') =>{}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/307914.html
標籤:
