[英]Typescript: get type of generic type
我是 Typescript 的新手(來自 C#),我正在努力處理“特殊”的通用實現。
這是我的代碼:
function createValue<TValue extends string | boolean>(): TValue[]
{
let result = new Array<TValue>();
if (typeof TValue === "string") // error 'TValue' only refers to a type, but is being used as a value here
{
result[0] = "abc" as TValue;
}
else
{
result[0] = false as TValue;
}
return result;
}
console.log(createValue<boolean>());
我是怎么得到類型的?
我已經嘗試過非常丑陋的解決方案來創造價值,但這也不符合預期。
let value : TValue = new Array<TValue>(1)[0];
let type = typeof value; // undefined
對象類型存在多種解決方案,但我沒有為基元找到它。
你能給我任何幫助嗎?
謝謝
您的問題在於在運行時使用 TypeScript 類型。 TypeScript 被編譯為 JavaScript,因此您的執行根本看不到TValue
類型。
typeof
運算符用於在其他地方而不是在運行時重用類型信息。 例如
function test(arg: string): boolean;
function test2(func1: typeof test): boolean;
根據您想要實現的目標,您需要提供一個字符串參數來指定您的操作。
function createValue(type: 'string' | 'boolean') {
let result = new Array();
if (type === "string")
{
result[0] = "abc";
}
else
{
result[0] = false;
}
return result;
}
console.log(createValue('boolean'));
TypeScript 應該能夠從那里推斷出您的類型。 如果沒有,您可以查看條件類型。
因為類型在運行時不存在,所以我最終得到了這樣的解決方案:
enum Types
{
string,
boolean,
number
}
function getType<TValue extends Types.string | Types.boolean>(t: TValue): Array<TValue extends Types.string ? string : boolean>
{
if (<Types>t == Types.string)
{
let arr = new Array<string>();
arr[0] = "abcd";
return arr as Array<TValue extends Types.string ? string : boolean>;
}
let arr = new Array<boolean>();
arr[0] = false;
return arr as Array<TValue extends Types.string ? string : boolean>;
}
console.log(getType(Types.boolean));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.