回答:
あなたがしなければならないのはresult
、次のようにあなたを文字列配列として定義することだけです:
const result : string[] = [];
配列タイプを定義しないと、デフォルトでになりますnever
。文字列を追加しようとすると、型の不一致が発生したため、表示されたエラーがスローされました。
never
sの配列が役立つユースケースは考えられないので、私は完全に同意します。しかし、それを調べている間に、私はこの答えに出くわしました。それは素晴らしい情報を持っています。
let x;
)を宣言すると、any
デフォルトで型になります。ないnever
。
any[]
。それはnever[]
それが役に立たなくなるので驚いた。直感的ではありません。答えてくれてありがとう。編集:文法
別の方法は:
const result = [] as any;
any
TypeScriptの機能が基本的にオフになるため、実際に使用することは適切なオプションではありません。これは回避策であり、さまざまなバグにつながる可能性があります。
これは最近の回帰か、typescriptの奇妙な動作のようです。コードがある場合:
const result = []
通常は、次のように扱われます。
const result:any[] = []
ただし、tsconfigにnoImplicitAny
FALSE と strictNullChecks
TRUEの両方がある場合は、次のように扱われます。
const result:never[] = []
この行動はすべての論理に反します、IMHO。nullチェックをオンにすると、配列のエントリタイプが変更されますか?そして、オンnoImplicitAny
にすると、any
警告なしでの使用が実際に復元されますか?
本当にの配列がany
ある場合、追加のコードでそれを示す必要はありません。
ReactJsフックのuseStateを使用しているときに、ReactJS statless関数で 同じエラーが発生しました。オブジェクト配列の状態を設定したかったので、次の方法を使用した場合
const [items , setItems] = useState([]);
次のように状態を更新します。
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
エラーが発生しました:
タイプ '{id:number;の引数 テキスト:任意の} 'は、タイプ' never 'のパラメーターに割り当てることができません
このようにすると
const [items , setItems] = useState([{}]);
エラーはなくなりましたが、インデックスがないアイテムがあり、データがありません(必要ありません)。
だから私が見つけた解決策は:
const [items , setItems] = useState([] as any);
私が見つけた解決策は
const [files, setFiles] = useState([] as any);
never[]
?「常に空になる配列」以外の用途はありますか?