typescriptハンドブックは現在、矢印機能について何も持っていません。通常の関数は、一般的に次の構文で型付けできます。例:
function identity<T>(arg: T): T {
return arg;
}
矢印関数の構文は何ですか?
typescriptハンドブックは現在、矢印機能について何も持っていません。通常の関数は、一般的に次の構文で型付けできます。例:
function identity<T>(arg: T): T {
return arg;
}
矢印関数の構文は何ですか?
回答:
ロビンによって参照される構文を説明する完全な例...
次のようなものがうまくいきます:
function foo<T>(x: T): T { return x; }
ただし、矢印ジェネリック関数を使用しても、次のことは行われません。
const foo = <T>(x: T) => x; // ERROR : unclosed `T` tag
回避策:ジェネリックパラメーターにextendsを使用して、コンパイラーがジェネリックであることをコンパイラに通知します。例:
const foo = <T extends unknown>(x: T) => x;
GenericFun<T, A=T>を含むセットを定義します。ただし、constなど、ジェネリック型が型注釈を直接構成できるようにすると、静的な安全性が GenericFun<number>GenericFun<string>const foo: GenericFunconst foo: GenericFun<string>const foo: GenericFun<number>
const foo = <T,>(x: T) => x;は、JSXのあいまいさを回避するために末尾のコンマもサポートしています。
上記の例は混乱を招きました。ReactとJSXを使用しているので、シナリオが複雑になっていると思います。
TypeScript Deep Diveから説明を得ました。これには、矢印のジェネリックが記載されています。
回避策:ジェネリックパラメーターでextendsを使用して、ジェネリックであることをコンパイラーに知らせます。これは、私を助けた単純な例からのものです。
const identity = < T extends {} >(arg: T): T => { return arg; }
あなたがいる場合は.tsx、ファイルあなただけ書き込むことはできません<T>が、この作品:
const foo = <T, >(x: T) => x;
extends {}ハックとは対照的に、このハックは少なくとも意図を保持します。
const foo = <T = any,>(x: T) => x動作しません...
言語仕様はp.64fで述べています
<T>(...)=> {...}という形式の構造は、型パラメーターを持つ矢印関数式として、または型パラメーターなしの矢印関数に適用される型アサーションとして解析できます。前者として解決される[..]
例:
// helper function needed because Backbone-couchdb's sync does not return a jqxhr
let fetched = <
R extends Backbone.Collection<any> >(c:R) => {
return new Promise(function (fulfill, reject) {
c.fetch({reset: true, success: fulfill, error: reject})
});
};
これは私のために働く
const Generic = <T> (value: T) => {
return value;
}
.tsファイルにある場合、これは機能します。それ以外の場合は、延長する必要があります。
とても遅いですが、ES6では拡張する必要はありません。
let getArray = <T>(items: T[]): T[] => {
return new Array<T>().concat(items)
}
let myNumArr = getArray<number>([100, 200, 300]);
let myStrArr = getArray<string>(["Hello", "World"]);
myNumArr.push(1)
console.log(myNumArr)
<T, >。次のようにカンマを追加する必要があります。@jbmilgromの回答の下の@Thomasコメントで説明されているように
const fooか?つまり、型を指定せずにtype GenericFun<T, A=T> = (payload: A) => T;、const foo: GenericFunまだジェネリックにしTますか?