TypeScript 縮小泛型函數
假設我們有一個通用函數
function hi<T>(name: T) { }
hi('Alex')
hi('Jim')
我想創建一個新的函數來限制通用型別,並且只允許 Alex 作為 name。類似下面的偽代碼
function hiAlex = hi<'Alex'>
hiAlex('Alex') // works well
hiAlex('Jim') // ERROR wrong name type
答案#1
遺憾的是,沒有專門的語法。我們能做的最好方式是重複呼叫時所實例化的簽名:
function hi<T>(name: T) { }
const hiAlex: (name: "Alex") => void = hi;
hiAlex('Alex') // works well
hiAlex('Jim') // ERROR wrong name type
答案#2
function hi<T>(name: T extends string ? 'Alex' : T) { }
hi('Alex')
hi('Jim') // Argument of type '"Jim"' is not assignable to parameter of type '"Alex"'
如果我正確理解你的問題的話,這樣的東西應該可以行得通。
或者乾脆不要讓它變得通用:
function hi(name: 'Alex') { }或
function hi<T>(name: 'Alex') { }