[英]Typescript class method ONLY if generic type is string
使用泛型類型 class,我希望某些方法僅在泛型類型為“字符串”時才可用。
使用以下代碼
class MyClass<T = string> {
value: T = null;
setDate(m: Moment) {
// could be used only if T is string
value = m ? m.format('YYYY-MM-DD') : null;
}
}
給我錯誤
Argument of type 'string' is not assignable to parameter of type 'T'
這非常清楚並且完全有意: Moment.format()
返回一個string
。 :D
僅當T
為string
時,是否有正確的方法使setDate()
方法可用?
提前,非常感謝。
我知道我可以使用m.format('YYYY-MM-DD') as unknown as T
來解決這個問題,但它看起來像是一種解決方法,而不是真正的 typescript 解決方案。
我知道條件類型,但我認為它不能解決我的問題。 至少,我沒有找到解決辦法。
使 function never
對不正確的通用參數進行 arg
type Moment = {format(s:string):string};
type SimpleEquals<T, V> = [T] extends [V] ? [V] extends [T] ? true : false : false;
class MyClass<T = string> {
value: T | null = null;
// could be used only if T is string
setDate(m: SimpleEquals<T, string> extends true ? Moment : never) {
this.value = m ? m.format('YYYY-MM-DD') as T : null;
}
}
declare let m: Moment;
new MyClass<string>().setDate(m) // ok
new MyClass<number>().setDate() //err
new MyClass<number>().setDate(m) //err
new MyClass<string | number>().setDate() //err
new MyClass<string | number>().setDate(m) //err
new MyClass<'qwe'>().setDate() //err
new MyClass<'qwe'>().setDate(m) //err
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.